如何访问 Task<T> 的 T 对象

Tot*_*oto 0 .net c# asynchronous

我使用 Task.Wait() 方法同步使用异步方法,但是当调用完成时,我想访问由 Task<> 模板化的对象。

Task<HttpResponseMessage> message = _httpClient.GetAsync(Globals.ENDPOINT_URI + Uri.EscapeDataString(query));
message.Wait();
Run Code Online (Sandbox Code Playgroud)

如何访问消息对象的 HttpResponseMessage?

谢谢

Kir*_*kin 5

您需要使用async/await,因为使用Wait和被认为是不好的做法Result。您的代码将更新为以下内容:

HttpResponseMessage message =
    await _httpClient.GetAsync(Globals.ENDPOINT_URI + Uri.EscapeDataString(query));
Run Code Online (Sandbox Code Playgroud)

await都会等待调用完成并提供结果,该结果将保存在您的message变量中。

互联网上有很多很好的资源,Stack Overflow 上有很多关于async/awaitC# 5 中引入的很好的答案。这里有一个页面可以帮助您入门: https: //learn.microsoft.com/en-us/dotnet/csharp/async

编辑:这是关于该Result问题的一个很好的资源:https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html