C# 如果我有两个等待任务。Run()';在方法中,第二个将等待第一个完成吗?
在我的C# 如果我有两个等待任务。Run()';在方法中,第二个将等待第一个完成吗?,c#,asynchronous,C#,Asynchronous,在我的OnStart中,我需要运行获取数据的代码,然后运行CheckScore方法GetData必须在运行CheckScore之前完成。这也是调用方法的正确方法吗?Method()或CheckScore()都不是异步运行的 有人能告诉我这样做是否有区别: protected override async void OnStart() { await Task.Run(() => Method()); } public void Method() { App.DB.Get
OnStart
中,我需要运行获取数据的代码,然后运行CheckScore
方法GetData
必须在运行CheckScore
之前完成。这也是调用方法的正确方法吗?Method()
或CheckScore()
都不是异步运行的
有人能告诉我这样做是否有区别:
protected override async void OnStart()
{
await Task.Run(() => Method());
}
public void Method()
{
App.DB.GetData();
PointChecker.CheckScore();
}
protected override async void OnStart()
{
await Task.Run(() => Method());
await Task.Run(() => PointChecker.CheckScore());
}
public void Method()
{
App.DB.GetData();
}
或者像这样:
protected override async void OnStart()
{
await Task.Run(() => Method());
}
public void Method()
{
App.DB.GetData();
PointChecker.CheckScore();
}
protected override async void OnStart()
{
await Task.Run(() => Method());
await Task.Run(() => PointChecker.CheckScore());
}
public void Method()
{
App.DB.GetData();
}
第二个会等待第一个完成吗
对。第一个代码下面的任何代码都将等待:
await Task.Run(() => Method());
将等待执行完成
有人能告诉我是否有区别
在您的简化示例中,基本上没有差异。您有一个async
方法,该方法在内部运行同步和顺序
如果您希望同时完成任何其他工作,可以稍后设置等待:
protected override async void OnStart()
{
Task methodTask = Task.Run(() => Method());
// do anything here while the Task runs
await methodTask; // wait here so that CheckScore() is not started yet
await Task.Run(() => PointChecker.CheckScore());
}
我在想,使用Await可以让OnStart()完成,这样UI就可以更新了
由于您已将
OnStart
声明为'async',因此它不会阻止UI,UI将保持响应。因为在您的示例中没有返回值和更新代码。这就是我的答案,不需要假设太多。是的,它们将互相追逐。等待异步模式的要点是,在方法完成之前不阻塞线程。操作系统将设法获取任务的状态。一旦完成,它将继续进行。同时,当它被执行时,或者在等待I/O或其他执行时,它将允许其他任务使用CPU资源。请记住,wait
是“如果正确的方法尚未完成,则暂停此方法”。如果您认为它做了其他事情,那么您可能弄错了。@Fildor-async
从来都不是签名的一部分。它是该方法的一个实现细节,恰好出现在一个奇怪的地方,使它看起来可能是签名的一部分。这就是为什么接口不能将方法标记为async
,并且不需要在虚拟/重写方法之间进行匹配。您试图实现什么?如果希望这些方法按顺序执行,那么只需调用Method();CheckScore()代码>不包含所有任务/等待内容。@Alan2如果用户界面准备就绪不需要完成这些方法,您只需启动并忘记即可。i、 e.调用Task。运行而不等待。@SelmanGenç但如果您这样做,请抽出一点时间考虑异常处理。