RunContinuationsAsynchronously nie działa asynchronicznie kontynuacji

Pracuj w dowolnym miejscu i na dowolnym urządzeniu dzięki platformie Microsoft 365

Uaktualnij program Microsoft 365, aby pracować w dowolnym miejscu z najnowszymi funkcjami i aktualizacjami.

Zaktualizuj teraz

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.


Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×