Applies To.NET Framework 4.6.1

Gejala

.NET Framework 4.6 ditambahkan enum Ketik nilai yang baru, RunContinuationsAsynchronously, enums TaskCompletionSource dan TaskCreationOptions . Nilai ini memaksa tugas untuk menjalankan asinkron, dan ini akan membantu mencegah kemogokan situasi. Namun, masalah telah ditemukan di mana, untuk beberapa jenis khusus continuations (khususnya ketika Task.WhenAll, Task.WhenAnyatau TaskExtensions.Unwrap membuat continuations), opsi diabaikan. Oleh karena itu, continuations mungkin masih berjalan serentak.Contoh berikut ini menunjukkan masalah tersebut. Jika nilai RunContinuationsAsynchronously telah berfungsi dengan baik, thread dua id yang akan dicetak tidak akan sama, karena kelanjutan akan dijadwalkan ke kain yang berbeda.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(); }}

Pemecahan masalah

Saat ini tidak ada penyelesaian untuk masalah ini. Microsoft .NET Framework tim bekerja pada solusi yang termasuk dalam pembaruan masa mendatang.

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.