C# C“任务”;“饰面”;正在执行任务。延迟?(温特)
我在tasks和Task.Factory中遇到了这种特殊情况。这是我的代码C# C“任务”;“饰面”;正在执行任务。延迟?(温特),c#,windows-runtime,task,delay,async-await,C#,Windows Runtime,Task,Delay,Async Await,我在tasks和Task.Factory中遇到了这种特殊情况。这是我的代码 public Task CreateAndStartSyncTask() { return Task.Factory.StartNew(async () => { ... do stuff ... await Task.Delay(500); ... do more stuff ... } } public void Synchronize(
public Task CreateAndStartSyncTask()
{
return Task.Factory.StartNew(async () =>
{
... do stuff ...
await Task.Delay(500);
... do more stuff ...
}
}
public void Synchronize()
{
var syncTask = CreateAndStartSyncTask();
syncTask.Wait(mTimeout);
switch(syncTask.Status) {
case TaskStatus.RanToCompletion:
// VICTORY!
break;
default:
throw syncTask.Exception;
}
}
所以这里我的问题是,当我运行这段光荣的代码时,我会在“…做更多的事情…”之前进入开关箱。然后任务继续运行,直到完成。这不是我想要的功能,因为我更希望任务能够完成
也就是说,在这个特定的上下文中,将它放在自己的任务中是有点多余的,因为它是以同步的方式处理的,但是我不能完全公开代码,我真的需要理解整个任务完成的心态
有什么事吗?我怎样才能真正检查一项任务是否真的结束了?不要使用
task.Factory.StartNew
。使用任务。改为运行。两者都有详细描述这一点的博客文章
总之,StartNew
不理解async
方法。它返回的任务
仅表示方法的第一个同步部分。要使用StartNew
,您必须调用Unwrap
或执行双重wait
。最好使用Task.Run
,它可以理解async
方法
此外,您不希望阻止异步
任务(即同步
中的等待
)。相反,你应该等待他们。如果你阻止它们,你很容易就会遇到我在博客上描述的问题。不要使用Task.Factory.StartNew
。使用任务。改为运行。两者都有详细描述这一点的博客文章
总之,StartNew
不理解async
方法。它返回的任务
仅表示方法的第一个同步部分。要使用StartNew
,您必须调用Unwrap
或执行双重wait
。最好使用Task.Run
,它可以理解async
方法
此外,您不希望阻止异步
任务(即同步
中的等待
)。相反,你应该等待他们。如果你阻止它们,你很容易就会遇到我在我的博客上描述的问题。mTimeout的值是多少?
当你替换等待任务时,你会得到什么。延迟(500)代码>带有任务。延迟(500)。等待()代码>mTimeout大约为10.000。任务。延迟(x)。等待();似乎解决了这个问题。我仍然想知道任务背后的逻辑是什么。延迟将任务的“IsCompleted”设置为true是什么?mTimeout的值是多少?替换等待任务时得到什么。延迟(500)代码>带有任务。延迟(500)。等待()代码>mTimeout大约为10.000。任务。延迟(x)。等待();似乎解决了这个问题。我仍然想知道任务背后的逻辑是什么。延迟将任务的“IsCompleted”设置为true是什么?这就澄清了它!谢谢这就清楚了!谢谢