2

如何在UpdateTasklist()方法之后执行SubmitWorkitem()方法而不阻塞线程?

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 web 服务并请求所有打开的工作项。在SubmitWorkitem()Method 中提交的工作项仍然是回复的一部分。我认为那是因为UpdateTasklist()在提交工作项完成之前执行。

请注意,这UpdateTasklist()也是一个异步方法

4

1 回答 1

5

重要提示:不要编写ASYNC VOID方法(除非您正在编写事件处理程序)

对于其余的:

这已经是您的代码中发生的事情了;这就是什么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();
}
于 2013-06-18T09:44:24.337 回答