2017-08-31 31 views
0

在下面的代碼:爲什麼Task.Run參數中使用的外部變量被視爲未分配?

async Task<int> Foo() 
{ 
    int result; 
    await Task.Run(() => { result = 9999; }); 
    return result; 
} 

VS 2015年報告的錯誤: 「未分配的局部變量 '結果' 使用」。所以,讓我們做一個改變:

async Task<int> Foo() 
{ 
    int result = 0; 
    await Task.Run(() => { result = 9999;}); 
    return result; 
} 

和瞧。這不僅會編譯,它會返回9999(按預期)。

爲什麼result在第一個示例中被認爲是未分配的,當它明顯分配在Task.Run語句中時?

回答

4

編譯器不夠聰明,不知道是否要執行lambda () => result = 999,因爲它不知道Task.Run的內部結構。

因爲它不知道lambda是否會運行,所以您需要保證resultreturn表達式之前有一個值賦予它。

相關問題