나는 (내 눈에서) 이상한 행동을 이해하려고합니다. 일부 비동기 메서드에 대한 호출이 있고 해당 결과를 검색하려고합니다. 이 시나리오 Result
에서Task.ContinueWith() 이해하려고 시도합니다.
var deleteTask = Task.Run(() => DeleteIndexAsync(localItem))
.ContinueWith(t =>
{
//handle and log exceptions
}, TaskContinuationOptions.OnlyOnFaulted);
if (!deleteTask.Result)
(A Task<bool>
을 반환 DeleteIndexAsync
은) false
하고 Status
는 WaitingForActivation
입니다. 이 코드 반면
내가
var deleteTask = Task.Run(() => DeleteIndexAsync(localItem));
deleteTask.ContinueWith(t =>
{
//handle and log exceptions
return false;
}, TaskContinuationOptions.OnlyOnFaulted);
if (!deleteTask.Result)
누군가가 이유를 설명 할 수 원하는 것을? 그리고 여기서 Task
대신 async
/await
을 사용할 수 있습니까?
편집 : 첫 번째 예에서와 같이 통화를, 체인 경우
var deleteTask = Task.Run(() => ThrowEx());
bool errorOccurred = false;
deleteTask.ContinueWith(t =>
{
errorOccurred = true;
}, TaskContinuationOptions.OnlyOnFaulted);
if (errorOccurred)
{
return true;
}
나는 task.Result가 오류가 발생했는지 여부를 확인하는 것이 좋다고 생각하지 않는다. task.Result에 액세스하면 여기에 예외가 발생하고 예외가 throw 된 경우에도 Faulted 플래그는 항상 false입니다. – user3292642
@ user3292642 내가 이해할 것 같지 않니? 예외를 삼키려면'Exception' 속성에 접근해야합니다. – slawekwin
예외를 삼키고 싶지 않습니다. 나는 이미 그것을 continuewith 방법으로 기록하고있다. 로깅이 완료된 후 예외가 발생하면 반환하고 싶지만 어떻게 처리되는지는 알 수 없습니다. 상태를 점검하는 것도 옵션이 아닙니다. – user3292642