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

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

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 הוא עובד על פתרון כדי לכלול בעדכון עתידי.


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

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

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

קהילות עוזרות לך לשאול שאלות ולהשיב עליהן, לתת משוב ולשמוע ממומחים בעלי ידע עשיר.

האם מידע זה היה שימושי?

עד כמה אתם מרוצים מאיכות השפה?
מה השפיע על החוויה שלך?
בלחיצה על 'שלח', אתה מאפשר למשוב שלך לשפר מוצרים ושירותים של Microsoft. מנהל ה-IT שלך יוכל לאסוף נתונים אלה. הצהרת הפרטיות.

תודה על המשוב!

×