Applies To.NET Framework 4.6.1

מאפייני הבעיה

4.6 Framework של .NET נוסף enum סוג ערך חדש, RunContinuationsAsynchronously, enums TaskCompletionSource ו- TaskCreationOptions . ערך זה כופה על משימות להפעלה באופן לא מסונכרן, ומסייעת זו כדי למנוע מצבים של מבוי סתום. עם זאת, התגלתה בעיה שבה, מתעלמת האפשרות עבור כמה סוגים מסוימים של continuations (במסוימת בעת Task.WhenAll, Task.WhenAnyאו TaskExtensions.Unwrap ליצור את continuations),. לכן, ייתכן continuations ימשיכו לפעול באופן סינכרוני.הדוגמה הבאה מציגה את הבעיה. אם הערך 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(); }}

פתרון

אין כעת דרך לעקוף בעיה זו. הצוות של Microsoft .NET Framework הוא עובד על פתרון כדי לכלול בעדכון עתידי.

זקוק לעזרה נוספת?

מעוניין באפשרויות נוספות?

גלה את יתרונות המנוי, עיין בקורסי הדרכה, למד כיצד לאבטח את המכשיר שלך ועוד.