RunContinuationsAsynchronously не запущено продовження асинхронно

ВАЖЛИВО! Ця стаття перекладена засобами машинного перекладу Microsoft. Статтю можна редагувати в середовищі Community Translation Framework (CTF). Щоб якомога швидше перекласти всі статті у своїй базі знань різними мовами, компанія Microsoft не лише звертається до професійних перекладачів, але й вдається до машинного перекладу, який потім редагується спільнотою. Такі статті можуть містити лексичні, синтаксичні та граматичні помилки. Microsoft не несе відповідальності за будь-які неточності, помилки або збитки, до яких може призвести неправильний переклад статей або їх використання. Докладніше про CTF див. на веб-сторінці http://support.microsoft.com/gp/machine-translation-corrections/uk-ua.

Клацніть тут, щоб переглянути цю статтю англійською мовою: 3118695
Ознаки
.NET Framework-4.6 додано нове значення типу enum, RunContinuationsAsynchronously, TaskCompletionSource і TaskCreationOptions-enums. Цей параметр дає змогу браузеру завдання, щоб запустити асинхронно, і це допомагає уникнути взаємоблокування ситуаціях. Однак, було виявлено проблему, для деяких певних типів частини, (зокрема, колиTask.WhenAll, Task.WhenAnyабо TaskExtensions.Unwrap, створіть на продовження), можливість ігнорується. Таким чином, продовження може ще одночасного запуску.

Наступний приклад демонструє, цю проблему. Якщо значення RunContinuationsAsynchronouslyфункціонує належним чином, два потоку команд виводяться ідентифікатори ніколи не буде те ж саме, тому, що продовження завжди буде заплановано на різні теми.

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 команда працює над вирішенням включити в майбутніх оновлень.


Попередження. Цю статтю переведено автоматично

Властивості

Ідентифікатор статті: 3118695 – останній перегляд: 11/25/2015 05:46:00 – виправлення: 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtuk
Зворотний зв’язок