Applies To.NET Framework 4.6.1

Причини

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

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.