-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'的代碼,這可能是您的問題所在。 –