ข้ามไปที่เนื้อหาหลัก
การสนับสนุน
ลงชื่อเข้าใช้
ลงชื่อเข้าใช้ด้วย Microsoft
ลงชื่อเข้าใช้หรือสร้างบัญชี
สวัสดี
เลือกบัญชีอื่น
คุณมีหลายบัญชี
เลือกบัญชีที่คุณต้องการลงชื่อเข้าใช้

อาการ

4.6 กรอบงาน.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 ของคุณจะสามารถรวบรวมข้อมูลนี้ได้ นโยบายความเป็นส่วนตัว

ขอบคุณสำหรับคำติชมของคุณ!

×