Rol*_*and 3 c# task backgroundworker async-await
尝试从使用BackgroundWorker升级到Task,我对如何在不调用Wait()的情况下保持后台作业运行感到困惑.
这是后台工作(简化):
private async Task RunAsync()
{
HttpResponseMessage response = await TheHttpClient.GetAsync(Path);
if (response.IsSuccessStatusCode)
{
textBox_Response.Text = await response.Content.ReadAsStringAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
单击"发送"按钮时,上面的代码应该运行,但由于后台代码有多个await异步调用,我猜Wait()需要多次调用:
private void button_Send_Click(object sender, EventArgs e)
{
Task t = RunAsync();
while (!t.IsCompleted)
{
t.Wait();
}
}
Run Code Online (Sandbox Code Playgroud)
但这会在后台作业的整个处理时间内阻止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.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |