我正在使用 TaskFactory 使用以下代码开始新任务。
var task = Task.Factory.StartNew(async () =>
{
await Task.Run(() =>
{
// Do API Call
var saveResponse = doAPICall();
}).ConfigureAwait(false);
}).Unwrap();
task.Wait();
doAPICall() 的代码如下所示,它调用了一个返回任务的外部 API。
private string doAPICall()
{
Task<string> response = client.FindBags(request);
response.Wait(60000);
if (response.Status == TaskStatus.RanToCompletion)
{
return response.Result;
}
}
问题出现在 doAPICall() 函数中,任务“响应”状态永远不会更改为 RanToCompletion,并且始终处于 WaitingForActivation 状态。我已经尝试增加等待超时但仍然没有运气。我正在使用 TaskFactory 而不是 Task,因为将来我想创建自定义 TaskFactory 以更好地控制调度程序和并发性。
这是我的代码中缺少的东西,内部任务永远不会被执行吗?
编辑 我根据删除不必要线程的评论修改了调用 doAPICall() 的代码,但仍然没有运气。:-(
var task = Task.Factory.StartNew(() =>
{
// Do API Call
var saveResponse = doAPICall();
});
task.Wait();