Fra*_*ald 9 .net c# wpf task-parallel-library async-await
我在C#,VS2012,WPF 4.5中有以下代码.我的期望是,.ContinueWith将在任务完成后执行(这是一个延续的完整目的,不是吗?).
这应该导致值为2英寸finalResult.
int myTestInt = 0;
Task task = Task.Factory.StartNew(async () =>
{
myTestInt = 1;
await Task.Delay(TimeSpan.FromSeconds(6));
myTestInt = 2;
}).ContinueWith(_ =>
{
int finalResult = myTestInt;
});
Run Code Online (Sandbox Code Playgroud)
实际上,finalResult被赋值为1.所以似乎await已经在声明中开始了延续.
这是预期的行为吗?我在这里错过了什么吗?ContinueWith任务完成后我不能依靠启动吗?
更新:
Justin的回答激发了我检查以下内容:
int myTestInt = 0;
Task task=Task.Factory.StartNew(async () =>
{
myTestInt = 1;
await Task.Delay(TimeSpan.FromSeconds(6));
myTestInt = 2;
});
task.Wait();
int result2 = myTestInt;
Run Code Online (Sandbox Code Playgroud)
finalResult仍设置为1.是否无法可靠地等待包含awaits 的任务完成?
Ste*_*ary 10
传递async委托时Task.Factory.StartNew,返回Task仅表示该委托的第一部分(直到它await尚未完成的时间).
但是,如果将async委托传递给新Task.Run方法(由于此原因而包含该方法),则返回Task表示整个委托.所以你可以ContinueWith按照你的期望使用.(虽然await通常是比较好的选择ContinueWith).
有关StartNewvs的更多信息Run,请参阅Stephen Toub关于该主题的帖子.
| 归档时间: |
|
| 查看次数: |
2055 次 |
| 最近记录: |