Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Objawy

.NET Framework 4.6 dodaje nową wartość typu enum, RunContinuationsAsynchronouslydo wyliczenia TaskCompletionSource i TaskCreationOptions . Ta wartość wymusza zadań w celu uruchomienia asynchronicznie, a to pozwala uniknąć sytuacji impasu. Jednak problem zostało ujawnione w przypadku gdy dla niektórych szczególnych rodzajów kontynuacji (w szczególności Task.WhenAll, Task.WhenAnylub TaskExtensions.Unwrap tworzenia kontynuacji) opcja jest ignorowana. W związku z tym kontynuacji może nadal uruchamiane synchronicznie.

Następujący przykład przedstawia ten problem. Jeśli wartość RunContinuationsAsynchronously były działa poprawnie, wątek dwóch identyfikatorów, które są drukowane nigdy nie będzie taka sama, ponieważ kontynuacji będzie zawsze być zaplanowane na różne tematy.

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();
}
}

Rozwiązanie

Nie ma obecnie nie ma rozwiązania tego problemu. Zespół Microsoft.NET Framework pracuje nad rozwiązaniem do uwzględnienia w przyszłej aktualizacji.


Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×