等待异步方法而不阻塞线程

本文关键字:线程 异步方法 等待 | 更新日期: 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();
}