-1
考虑下面的代码:为什么要等待退出?
public async Task Send() // part of Sender class
{
// sync code
}
// //
private async Task HandleMessage()
{
// await sender.Send(); // exits HandleMessage immediately
sender.Send().Wait(); // works as expected, waiting to complete
DoOtherStuff(); // doesn't get hit with await
return;
}
RunRecurringTask(async() => await HandleMessage(), result);
public void RunRecurringTask(Action action, RecurringTaskRunResult result)
{
action();
result.DoStuff();
}
我认为await
告诉线程回来了期待已久的事情是完成时,但它看起来像某种原因没有发生:其余代码永远不会打,一切只是...停下来。什么可能导致这个?
这是Azure WebJob中的控制台应用程序,它是值得的。当使用Wait
时,我得到了预期的结果,但是在await
中,工作完成。
当'async'方法找到'await'时,它会将方法执行委托给另一个线程,并且方法立即返回。当方法执行完成时,它会回滚执行该方法的其余部分。 –
@NiyokoYuliawan在我的情况下,我希望webjob继续运行(不报告“已完成”),直到所有工作完成。我看到的行为是'DoOtherStuff'永远不会被记录到webjob,除非我使用'Wait' – SB2055
如果您使用的是webjobs,您的问题是http://stackoverflow.com/questions/22916325/azure- webjobs-can-i-use-async-methods请包含调用'HandleMessage'的代码,这可能是您的问题所在。 –