在我的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();
}
答案 0 :(得分:2)
第二个会等待第一个完成吗?
是的。第一次等待以下的任何代码:
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
声明为“异步”,因此不会阻塞UI,UI会保持响应状态。由于您的示例中没有返回值,也没有更新代码。到目前为止,我的回答是可以接受的,而无需承担太多责任。
答案 1 :(得分:1)
是的,它们将相互运行。等待异步模式的要点是,直到方法完成后才阻塞线程。操作系统将设法获取任务状态。完成后,它将继续。同时,当它执行时,也许在等待I / O或其他任何执行时,它将允许其他任务使用CPU资源。