현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

RunContinuationsAsynchronously 연속 작업을 비동기적으로 실행 되지 않는다

이 문서는 Microsoft 기계 번역 소프트웨어를 이용하여 번역되었으며 Microsoft Community에 의한 Community Translation Framework(CTF) 기술 혹은 사람이 번역한 내용에 의하여 사후 편집될 수 있습니다. Microsoft는 Knowledge Base에 있는 모든 문서에 다양한 언어로 접근할 수 있도록 하기 위하여 기계 번역, 사람에 의한 번역 및 커뮤니티가 편집한 내용을 모두 제공합니다. 번역된 문서는 어휘, 구문 및/혹은 문법에 오류가 있을 수 있습니다. Microsoft는 번역 오류로 인한 부정확성, 오류 및/또는 손해와 이를 고객이 사용하는 데에 대하여 책임을 지지 않습니다.

이 문서의 영문 버전 보기:3118695
현상
.NET Framework 4.6 TaskCompletionSourceTaskCreationOptions열거형을 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();    }}

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


경고: 이 문서는 자동으로 번역되었습니다.

속성

문서 ID: 3118695 - 마지막 검토: 11/25/2015 03:48:00 - 수정: 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtko
피드백