RunContinuationsAsynchronously chạy continuations không đồng bộ

QUAN TRỌNG: Bài viết này được dịch bằng phần mềm dịch thuật của Microsoft và có thể được Cộng đồng Microsoft chỉnh sửa lại thông qua công nghệ CTF thay vì một biên dịch viên chuyên nghiệp. Microsoft cung cấp các bài viết được cả biên dịch viên và phần mềm dịch thuật thực hiện và cộng đồng chỉnh sửa lại để bạn có thể truy cập vào tất cả các bài viết trong Cơ sở Kiến thức của chúng tôi bằng nhiều ngôn ngữ Tuy nhiên, bài viết do máy dịch hoặc thậm chí cộng đồng chỉnh sửa sau không phải lúc nào cũng hoàn hảo. Các bài viết này có thể chứa các sai sót về từ vựng, cú pháp hoặc ngữ pháp, Microsoft không chịu trách nhiệm về bất kỳ sự thiếu chính xác, sai sót hoặc thiệt hại nào do việc dịch sai nội dung hoặc do hoạt động sử dụng của khách hàng gây ra.

Nhấp chuột vào đây để xem bản tiếng Anh của bài viết này: 3118695
Triệu chứng
Khuôn khổ .NET 4.6 vào enum gõ giá trị mới, RunContinuationsAsynchronously, TaskCompletionSourceTaskCreationOptionsenums. Giá trị này áp dụng tác vụ để chạy không đồng bộ và điều này giúp tránh trường hợp gián đoạn. Tuy nhiên, một vấn đề đã được phát hiện, một số loại cụ thể của continuations (trong đó khiTask.WhenAll, Task.WhenAnyhoặc TaskExtensions.Unwraptạo các continuations), tuỳ chọn sẽ bị bỏ qua. Do đó, continuations có thể vẫn còn chạy đồng bộ.

Mẫu sau hiển thị các vấn đề. Nếu giá trị RunContinuationsAsynchronouslyđã hoạt động bình thường, hai chuỗi ID được in ra không bao giờ sẽ giống nhau, vì tiếp tục sẽ luôn được sắp xếp vào các chủ đề khác nhau.

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();    }}

Giải pháp
Hiện không có giải pháp cho vấn đề này. Microsoft Khuôn khổ .NET nhóm đang làm việc trên một giải pháp cho bao gồm trong bản Cập Nhật trong tương lai.


Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 3118695 - Xem lại Lần cuối: 11/25/2015 05:46:00 - Bản sửa đổi: 1.0

Microsoft .NET Framework 4.6.1

  • kbsurveynew kbexpertiseadvanced kbtshoot kbmt KB3118695 KbMtvi
Phản hồi