我想制作非阻塞的GET和POST请求。我已设法用BackgroundWorker
来解决它,但我需要你的帮助才能使用任务来实现它。
public Task<string> Post(Uri uri, string data)
{
return _webClient.UploadStringTaskAsync(uri, data);
}
public Task<string> Get(Uri uri)
{
return _webClient.DownloadStringTaskAsync(uri);
}
我需要按顺序运行请求。实现这个的正确方法是什么?标记async
和await
的方法?使用Task.WaitAll()
等待每项任务?
我所追求的一个例子:
Task<string> loginTask = Post("login", data);
// wait for webrequest to complete and make use of response string
// use data from first request in a new request:
Task<string> someOtherRequest = Get("details");
答案 0 :(得分:0)
您可以使用await Task.Run()
:
await Task.Run(()=> { Run_UI_Blocking_Function(); });
例如:
在Post()
功能中,您可以添加以下内容:
await Task.Run(()=> { PostString = Post(new Uri("url"), "data"); });
在&#39; Get()&#39;功能,您可以添加:
await Task.Run(()=> { GetString = Get(new Uri("url")); });
您只需要将async
添加到您的通话功能中即可。这是一个完整的例子:
private async void btn_PostData_Click(object sender, EventArgs e)
{
await Task.Run(()=> { PostString = Post(new Uri("url"), "data"); });
}
希望这会有所帮助。它真的很短而且很甜蜜。
答案 1 :(得分:-1)
您需要将方法标记为异步,并等待结果。
public async Task<string> Get(Uri uri)
{
return await _webClient.DownloadStringTaskAsync(uri);
}
你也可以安装Microsoft HttpClient library,它已经被用于异步调用,并且可能重量轻一点。