Tôi gặp sự cố khi sử dụng các công cụ async/await mới trong C#. Đây là kịch bản của tôi:Cú pháp để khởi chạy nhiều tác vụ không đồng bộ trong C#
static async Task<bool> ManageSomeRemoteTask(int Id, bool flag)
{
var result = await serviceClient.AuthenticateIdAsync(Id);
[... Setup Some Data ...]
await serviceClient.LongAndSlowRemoteCallAsync(Data);
}
static void SendATonOfJunkToSomeWebServiceThatDoesntSupportBatches
{
var myTasks = Dictionary<int, Task<bool>>();
while(IdsLeftToProcess > 0)
{
Task<bool> t = ManageSomeRemoteTask(Id, true);
myTasks.Add(IdsLeftToProcess ,t);
myTasks[IdsLeftToProcess].Start();
IdsLeftToProcess --;
}
Task.WaitAll(myTasks.Values.ToArray()); //Wait until they are all done
[... Report statistics ...]
}
Tôi có 1 vấn đề ở chỗ khi tôi cố gắng chạy này, tôi nhận được một InvalidOperationException trên Start() với thông báo lỗi " Bắt đầu có thể không được gọi vào một nhiệm vụ hứa hẹn mang phong cách "Thông báo lỗi này dường như không xuất hiện trong Google hoặc Bing nên tôi không chắc nó có ý nghĩa gì. Đây là mối quan tâm số một của tôi, làm thế nào để có được điều này để chạy. Tôi cũng đã thử TaskFactory.StartNew() nhưng không hiểu làm thế nào để vượt qua các tham số cho phương pháp của tôi theo cách đó.
Mặc dù ý kiến của tôi là dòng không nên ở đó, bạn sẽ tiết kiệm một chút thời gian bằng cách không kéo thứ gì đó bạn đã tham chiếu ra khỏi từ điển ... 'myTasks [IdsLeftToProcess] .Start();' sẽ được đại diện tốt hơn bởi 't.Start()' (nếu nó là cần thiết ở nơi đầu tiên) – spender