【发布时间】:2017-02-19 21:49:27
【问题描述】:
跟进有关 Fire and 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
想象一下,您正在使用 Fire and Forget 进行日志记录。所以你不想阻塞调用代码,而是想按发生的顺序写入所有记录的数据。
【问题讨论】:
-
为什么不将您的操作排队并按您想要的顺序调用它们?
-
您确实意识到
Task.Delay(messageNumber * 1000);在这种情况下是无用的,因为它没有被等待?下一行之前不会有延迟Console.WriteLine(messageNumber);