我發現在C#中調用TaskEx.Delay與異步框架CTP當某種問題的異步框架TaskEx.Delay問題
public async Task<string> TestAsync() {
return await TaskEx.RunEx<string>(async() => { //in real app this is time consuming code so this line is so complex
await TaskEx.Delay(1000);
return "test;
});
}
public async void Test {
var count = 0;
while(count < 100) {
var val = await TestAsync();
Console.WriteLine(val); // in real app this line adds elements to observable collection binded to ListBox
count++;
}
}
在控制檯上輸出出現一次主要是(有時是兩個三次)但不是我所期望的100倍。
編輯:
它不控制檯應用程序(上面的代碼被簡化)它是WP7應用程序。沒有使用延遲它工作正常。
這不是您正在運行的實際代碼 - 您已經在等待非異步方法。如果你能想出一個簡短但完整的程序,那真的會有所幫助。目前我無法訪問編譯器,但通過一個完整的應用程序,我至少可以更多地診斷正在發生的事情。 – 2011-06-02 17:15:59
如果您認爲TaskEx.Delay有問題,請嘗試在控制檯應用程序中顯示它。 – 2011-06-02 21:13:19
我很確定 - 從Microsoft Visual Studio異步CTP包打開示例項目(C#Windows Phone)Netflix。在MainPage.xaml.cs中的LoadMoviesAsync中添加等待TaskEd.Delay(1000),在78行右下方的imageCount + = movies.Length;並將pageCount更改爲2以更好地查看結果。啓動應用程序,在年份框中輸入2000,然後上下移動列表中的項目。經過一段時間後,物品將停止加載,但仍有數百個物品剩下。刪除延遲,沒有問題! – awattar 2011-06-02 22:10:57