Tôi đang sử dụng Tasks để chạy các lệnh gọi máy chủ đang chạy trong thời gian dài trong ViewModel của mình và kết quả được sắp xếp lại khi Dispatcher
sử dụng TaskScheduler.FromSyncronizationContext()
. Ví dụ:
var context = TaskScheduler.FromCurrentSynchronizationContext();
this.Message = "Loading...";
Task task = Task.Factory.StartNew(() => { ... })
.ContinueWith(x => this.Message = "Completed"
, context);
Điều này hoạt động tốt khi tôi thực thi ứng dụng. Nhưng khi tôi chạy NUnit
các bài kiểm tra của mình, Resharper
tôi nhận được thông báo lỗi trong cuộc gọi FromCurrentSynchronizationContext
là:
SynchronizationContext hiện tại có thể không được sử dụng làm TaskScheduler.
Tôi đoán điều này là do các bài kiểm tra được chạy trên các luồng công nhân. Làm cách nào để đảm bảo các bài kiểm tra được chạy trên luồng chính? Những đề nghị khác dều được hoan nghênh.
TaskScheduler.FromCurrentSynchronizationContext()
bên trong lambda và việc thực thi được hoãn lại cho một luồng khác. lấy bối cảnh bên ngoài lambda đã khắc phục sự cố.