Перейти к основному контенту
Поддержка
Войдите с помощью учетной записи Майкрософт
Войдите или создайте учетную запись.
Здравствуйте,
Выберите другую учетную запись.
У вас несколько учетных записей
Выберите учетную запись, с помощью которой нужно войти.

Симптомы

4.6 платформа.NET Framework добавлено новое значение типа enum, RunContinuationsAsynchronouslyдля перечисления TaskCreationOptions и TaskCompletionSource . Этот режим позволяет асинхронно выполнять задачи, и это позволяет избежать подобных ситуаций. Тем не менее, была обнаружена проблема, для некоторых конкретных видов продолжений (в частности, при 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();
}
}

Решение

В данный момент нет решения этой проблемы. Платформа.NET Framework Microsoft team работает над решением для включения в будущие обновления.


Нужна дополнительная помощь?

Нужны дополнительные параметры?

Изучите преимущества подписки, просмотрите учебные курсы, узнайте, как защитить свое устройство и т. д.

В сообществах можно задавать вопросы и отвечать на них, отправлять отзывы и консультироваться с экспертами разных профилей.

Были ли сведения полезными?

Насколько вы удовлетворены качеством перевода?
Что повлияло на вашу оценку?
После нажатия кнопки "Отправить" ваш отзыв будет использован для улучшения продуктов и служб Майкрософт. Эти данные будут доступны для сбора ИТ-администратору. Заявление о конфиденциальности.

Спасибо за ваш отзыв!

×