Aplica-se A
.NET Framework 4.6.1

Sintomas

O quadro 4.6. .NET adicionado um valor de tipo de enum novo, RunContinuationsAsynchronously, enums de TaskCompletionSource e TaskCreationOptions . Este valor obriga a tarefas para executar de forma assíncrona, e isto ajuda a evitar situações de impasse. No entanto, foi descoberto um problema em que, para alguns tipos específicos de continuations (em especial quando Task.WhenAll, Task.WhenAnyou TaskExtensions.Unwrap criar os continuations), a opção é ignorada. Por conseguinte, continuations pode ainda execução síncrona.O exemplo seguinte mostra o problema. Se o valor de RunContinuationsAsynchronously foram funcionar correctamente, o thread de dois IDs são impressos saída nunca seria iguais, uma vez que a continuação será sempre agendada para diferentes threads.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(); }}

Resolução

Não existe actualmente nenhuma solução para este problema. A equipa do Microsoft .NET Framework está a trabalhar numa solução para incluir numa actualização futura.

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.