我有一个被定义为
public async Task SomeAsyncMethod()
{
DoSomeStuff();
await Task.Run(() => {
DoSomeSyncStuff();
DoSomeOtherSyncStuff();
});
var someDebugVariable = "someDebugValue";
}
这个方法本身完全按照其预定功能运行,一切都很顺利。然而……看起来“外部”的异步Task
从未完成。
例如:当我像这样调用它时:
public void CallerMethod()
{
Task t = SomeAsyncMethod();
t.Wait();
}
t.Wait()
从未完成。此外:如果我在 someDebugVariable
的赋值处放置断点,它永远不会被触发。
我可以补充说明的是,DoSomeSyncStuff
和 DoSomeOtherSyncStuff
确实执行了它们应该执行的操作,并且通过对它们进行调试,我知道它们都已经完成。
为了证明我的观点,我修改了我的方法如下,结果仍然相同。
public async Task SomeAsyncMethod()
{
DoSomeStuff();
await Task.Run(() => {
/*
DoSomeSyncStuff();
DoSomeOtherSyncStuff();
*/
var a = 2; var b = 3; var c = a + b;
});
var someDebugVariable = "someDebugValue";
}
编辑
我尝试过移除除了await Task.Run
以外的所有内容,但是没有任何变化。它仍然无法完成。
这个应用程序是一个WPF应用程序。调用线程是UI线程。
我在这里漏掉了什么?
Wait
永远不会被调用。 - Daniel KelleySynchronizationContext
。这个调用只是我编写的一个测试方法,用于检查任务是否真的没有完成。 - Hemisphera