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

标签 c# wpf asynchronous .net-4.5 async-await

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

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

最佳答案

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

其余的:

这已经在你的代码中发生了;这就是await的意思;基本上,您的 DifferentClass.UpdateTasklist(); 方法作为延续的一部分发生,当且仅第一个任务( >this.SubmitWorkitem(workitem)) 完成。

根据您的编辑,有一个缺少的步骤:您应该等待第二个方法,否则该方法无法报告完成/失败(IIRC,编译器也会提醒您):

private async Task SubmitWorkitem(Workitem workitem)
{
    await Task.Run(() => this.SubmitWorkitem(workitem));
    var locator = new ViewModelLocator();
    await locator.Task.UpdateTasklist();
}

关于c# - 等待异步方法而不阻塞线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17165488/

相关文章:

c# - 在 UWP 应用程序中使用加密将对象序列化为文件

c# - 如何进入 dll 方法调用或构造函数,以便它询问源代码?

c# - 在单元测试中模拟类中的类

WPF 在 ListBox 上绘图

.net - WPF 是否对所有 Winforms 控件具有等效控件?

javascript - await 仅在异步函数中有效 - eval 在异步中

c# - 使用 OWIN 和异步方法的多语言网站

c# - 使用时区 UTC+0 时.NET c# ConvertTimeToUtc 无法发送到 Firestore

c# - WPF中的静态资源和动态资源有什么区别?

android - robospice 如何管理 Activity 生命周期?