c# – 如何在不调用Wait()的情况下保持RunAsync()方法在后台运行
发布时间:2020-12-15 23:33:22 所属栏目:百科 来源:网络整理
导读:尝试从使用BackgroundWorker升级到Task,我对如何在不调用Wait()的情况下保持后台作业运行感到困惑. 这是后台工作(简化): private async Task RunAsync() { HttpResponseMessage response = await TheHttpClient.GetAsync(Path); if (response.IsSuccessStat
尝试从使用BackgroundWorker升级到Task,我对如何在不调用Wait()的情况下保持后台作业运行感到困惑.
这是后台工作(简化): private async Task RunAsync() { HttpResponseMessage response = await TheHttpClient.GetAsync(Path); if (response.IsSuccessStatusCode) { textBox_Response.Text = await response.Content.ReadAsStringAsync(); } } 单击“发送”按钮时,上面的代码应该运行,但由于后台代码有多个等待异步调用,我想有几个需要的Wait()调用: private void button_Send_Click(object sender,EventArgs e) { Task t = RunAsync(); while (!t.IsCompleted) { t.Wait(); } } 但这会在后台作业的整个处理时间内阻止GUI. 如何启动后台作业并立即从按钮单击处理程序返回,同时允许后台作业运行所有异步调用? 我知道如何使用BackgroundWorker实现这一点,我不应该在这里使用任务吗? 解决方法
事件处理程序是唯一允许您执行async void的地方,您所做的是使事件处理程序异步并在那里等待它
private async void button_Send_Click(object sender,EventArgs e) { await RunAsync(); //Do code here that needs to run after RunAsync has finished. } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |