Microsoft로 로그인
로그인하거나 계정을 만듭니다.
안녕하세요.
다른 계정을 선택합니다.
계정이 여러 개 있음
로그인할 계정을 선택합니다.

증상

.NET Framework 4.6 TaskCompletionSource 및 TaskCreationOptions 열거형을 RunContinuationsAsynchronously새 enum 형식 값을 추가합니다. 이 값이 작업이 비동기적으로 실행 하 고 이렇게 하면 교착 상태 상황을 방지 합니다. 그러나 문제가 발견 된 위치를 일부 특정 종류 ( Task.WhenAll, Task.WhenAny또는 TaskExtensions.Unwrap 는 연속 작업을 만들 때에 특히)에 연속의 옵션이 무시 됩니다. 따라서 연속 동기적으로 실행할 수 수 있습니다.

다음 샘플에서는 문제를 보여 줍니다. RunContinuationsAsynchronously 값은 제대로 작동 하는 경우 두 스레드 Id를 출력 하는 것 같을 수는 없습니다, 항상에 서로 다른 스레드에서 연속 작업이 예약을 하기 때문에.

using System;using System.Threading;
using System.Threading.Tasks;

class Program
{
static void Main()
{
var mres = new ManualResetEventSlim();

Console.WriteLine(Environment.CurrentManagedThreadId);

var tcs = new TaskCompletionSource<bool>(TaskCreationOptions.RunContinuationsAsynchronously);

var t = Task.WhenAll(tcs.Task);

t.ContinueWith(delegate
{
Console.WriteLine(Environment.CurrentManagedThreadId);
mres.Set();
}, TaskContinuationOptions.ExecuteSynchronously);

tcs.SetResult(true);
mres.Wait();
}
}

해결 방법

현재이 문제에 대 한 해결 방법은.입니다. Microsoft.NET Framework 팀은 향후 업데이트에 포함 된 솔루션에서 작동 합니다.


도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.

이 정보가 유용한가요?

언어 품질에 얼마나 만족하시나요?
사용 경험에 어떠한 영향을 주었나요?
제출을 누르면 피드백이 Microsoft 제품과 서비스를 개선하는 데 사용됩니다. IT 관리자는 이 데이터를 수집할 수 있습니다. 개인정보처리방침

의견 주셔서 감사합니다!

×