【发布时间】:2017-03-25 00:23:27
【问题描述】:
我猜很简单,但我在任务的工作中有些误解
当我调用下面的代码时,它运行良好,我会在大约 1 秒内得到结果。
return Task.Run(() => SendRequest<IADsystem[]>(path)).Result;
但是这个永远不会返回结果:
Task<IADsystem[]> task = SendRequest<IADsystem[]>(path);
task.Wait(); //also tried without wait
return task.Result;
我想也许任务没有启动,我需要调用 Start(),但是当我完成它时,我得到了“Start may not be called on a promise-style task”异常。
SendRequest 方法:
private async Task<T> SendRequest<T>(string requestUri) where T : class
{
var authHandler = new HttpClientHandler();
authHandler.Credentials = CredentialCache.DefaultNetworkCredentials;
using(var client = new HttpClient(authHandler))
{
client.BaseAddress = apiServerURI;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(jsonAcceptType);
HttpResponseMessage response = await client.GetAsync(requestUri);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsAsync<T>();
}
else
return null;
}
}
请解释一下它是如何工作的
【问题讨论】:
-
你试过
var result = await SendRequest<IADsystem[]>(path); -
您的
SendRequest方法与多线程无关。你在哪里执行它,什么环境(控制台、Winforms、WPF、ASP:NET)? -
如果你从 UI 线程调用第二种方法,你就进入了死锁
-
@Fabio,ASP NET Web 窗体,等待相同的结果 - 永不返回
-
这条线应该可以工作
var result = await SendRequest<IADsystem[]>(path);。你说的“永远不会回来”是什么意思?你如何检查这永远不会返回
标签: c# multithreading asynchronous async-await task