나는 다음과 같은 코드가 있습니다비동기 작업
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
이 무의식적으로 대기하는 소비자를 발생시킵니다.이 비동기 메소드를 호출하는 동기화 메소드이므로 .Wait()을 호출합니다.
_commService.SendPushNotificationAsync(user.Username, notificationDto.PushContent).Wait(TimeSpan.FromSeconds(1));
설정 시간이 지난 후에 어떻게 강제 종료합니까?
작업을 수행하는 대신 await
대신 간단히 "실행 및 삭제"하면 어떻게됩니까?
어디에서이 코드를 실행합니까? 내 말은, 웹 애플리케이션, 데스크톱 애플리케이션, 아마도 모바일 일까? – Evk
@Evk 이것은 WebApi 컨트롤러에서 호출하는 동기화 서비스 메서드에서 호출 된 서비스 메서드에 있습니다. – SB2055
"UI"또는 "요청"스레드가있는 환경에서 Wait (또는 Task.Result)를 async \ await과 함께 사용하지 마십시오. 사용자가 관찰하는 것처럼 교착 상태가됩니다. – Evk