gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 21:59:39 25 4
gpt4 key购买 nike

如何在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com