等待异步方法而不阻塞线程
本文关键字:线程 异步方法 等待 | 更新日期: 2023-09-27 18:18:55
如何在执行SubmitWorkitem()
方法后执行UpdateTasklist()
方法而不阻塞线程?
private async void SubmitWorkitem(Workitem workitem)
{
await Task.Run(() => this.SubmitWorkitem(workitem));
//UpdateTasklist() should be executed after SubmitWorkitem() method.
//How can i achieve this without blocking the UI thread?
var locator = new ViewModelLocator();
locator.Task.UpdateTasklist();
}
编辑: UpdateTasklist()
方法连接到wcf webservice并请求所有打开的工作项。在SubmitWorkitem()
方法中提交的工作项仍然是回复的一部分。我想这可能是因为UpdateTasklist()
是在提交工作项之前执行的。
注意UpdateTasklist()
也是一个异步方法
重要提示:不要写ASYNC VOID
METHODS(除非你在写一个事件处理程序)
其余部分:
这已经在你的代码中发生了;这就是await
的含义;基本上,您的DifferentClass.UpdateTasklist();
方法作为延续的一部分发生,当并且仅当第一个任务(this.SubmitWorkitem(workitem)
)完成时调用该延续。
在您的编辑中,是缺少的步骤:您应该await
第二个方法,否则该方法无法报告完成/失败(IIRC编译器也会唠叨您):
private async Task SubmitWorkitem(Workitem workitem)
{
await Task.Run(() => this.SubmitWorkitem(workitem));
var locator = new ViewModelLocator();
await locator.Task.UpdateTasklist();
}