繼續提供圍繞Fire和Forget的許多問題提供的解決方案。我的情景是我想要運行被遺忘的事件以便觸發它們。火與遺忘(但不是完全)
我的解決方案是基於Simplest way to do a fire and forget method in c# 4.0
這裏是我的測試代碼。如預期的那樣,它永遠不會保證它們將被處理的順序。
static void Main(string[] args)
{
Test(5);
Console.WriteLine("5 sent");
Test(2);
Console.WriteLine("2 sent");
Test(1);
Console.WriteLine("1 sent");
Test(4);
Console.WriteLine("4 sent");
Console.WriteLine("all sent");
Console.ReadLine();
}
private static void Test(int messageNumber)
{
Action myMethod =() => {
Task.Delay(messageNumber * 1000);
Console.WriteLine(messageNumber);
};
Blindly.Run(myMethod);
}
和我的輸出
5 sent
2 sent
1 sent
4 sent
all sent
2
1
5
4
試想一下,你正在使用消防和忘記了記錄。所以你不想阻止調用代碼,但想要寫入所有記錄的數據以便它們發生。
爲什麼不排隊你的行爲和你想要的順序調用它們? – Shocked
你確實意識到Task.Delay(messageNumber * 1000);'在這種情況下沒用,因爲它沒有等待?在下一行'Console.WriteLine(messageNumber);'之前不會有延遲 –