をぶら下げ:非同期タスク、私は次のコードを持っている
public async Task SendPushNotificationAsync(string username, string message)
{
var task = ApnsNotifications.Instance.Hub.SendAppleNativeNotificationAsync(alert, username);
if (await Task.WhenAny(task, Task.Delay(500)) == task) {
return true;
}
return false;
}
を私は(含むメソッドの外に返すことはありません)SendAppleNativeNotificationAsync
が無期限にハングしていることに気づいたので、私は500msの後にキャンセルし、それを言ってみました。しかし、まだ... WhenAny
への呼び出しは現在、ハングし、私は消費者だけで無期限に待機し、その結果、return
GETヒットを見ることはない(それは、この非同期メソッドを呼び出して同期する方法ですので、私は.WAIT()を呼び出し):
_commService.SendPushNotificationAsync(user.Username, notificationDto.PushContent).Wait(TimeSpan.FromSeconds(1));
どのようにして設定時間後にこれを強制終了するのですか?
タスクを実行する代わりにawait
の代わりに単に「火をつけて忘れる」とはどうなりますか?
このコードはどこで実行しますか?私は、Webアプリケーション、デスクトップアプリケーション、おそらくモバイル? – Evk
@Evkこれは、WebApiコントローラによって呼び出される同期サービスメソッドから呼び出されるサービスメソッドにあります。 – SB2055
"UI"または "request"スレッドを持つ環境でWait(またはTask.Result)をasync \ awaitと一緒に使用しないでください。あなたが観察したようにデッドロックします。 – Evk