次のコードを使用して、TaskFactory を使用して新しいタスクを開始しています。
var task = Task.Factory.StartNew(async () =>
{
await Task.Run(() =>
{
// Do API Call
var saveResponse = doAPICall();
}).ConfigureAwait(false);
}).Unwrap();
task.Wait();
doAPICall() のコードは、Task を返す外部 API を呼び出す以下のようなものです。
private string doAPICall()
{
Task<string> response = client.FindBags(request);
response.Wait(60000);
if (response.Status == TaskStatus.RanToCompletion)
{
return response.Result;
}
}
doAPICall() 関数で、タスクの「応答」ステータスが RanToCompletion に変わらず、常に WaitingForActivation ステータスになるという問題が発生します。私はすでに待機タイムアウトを増やそうとしましたが、まだ運がありません。Task の代わりに TaskFactory を使用しているのは、将来、スケジューラと同時実行性をより詳細に制御するためにカスタム TaskFactory を作成したいからです。
内部タスクが実行されないコードに欠けているものはありますか?
編集 不要なスレッドを削除するというコメントに従って doAPICall() を呼び出すコードを変更しましたが、まだうまくいきません。:-(
var task = Task.Factory.StartNew(() =>
{
// Do API Call
var saveResponse = doAPICall();
});
task.Wait();