我发现在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