我正在編寫一個小的控制檯應用程序,以嘗試熟悉使用async/await。在這個應用程序中,我意外地創建了一個無限遞歸循環(我現在已經修復)。這個無限遞歸循環的行爲讓我感到驚訝。它並沒有拋出StackOverflowException
,而是陷入僵局。無限遞歸調用異步/等待永不拋出異常
考慮下面的例子。如果Foo()
被調用runAsync
設置爲false
,則拋出StackOverflowException
。但是當runAsync
是true
時,它變得死鎖(或至少看起來像)。任何人都可以解釋爲什麼行爲如此不同?
bool runAsync;
void Foo()
{
Task.WaitAll(Bar(),Bar());
}
async Task Bar()
{
if (runAsync)
await Task.Run(Foo).ConfigureAwait(false);
else
Foo();
}