【发布时间】:2021-06-26 20:55:58
【问题描述】:
我正在尝试同时执行一系列任务,精确到纳秒。这可能吗?
似乎我添加的任务越多,不准确的范围就越大 - 这让我相信我做错了什么。
对此有最佳实践吗?
这是我的代码以及我得到的结果:
class Program
{
static async Task Main(string[] args)
{
int[] iterations = Enumerable.Range(1, 100).ToArray();
Func<Task<DateTime>>[] delegates = new Func<Task<DateTime>>[iterations.Length];
foreach (int i in iterations)
{
async Task<DateTime> GetTime()
{
await Task.Delay(1000);
return DateTime.Now;
}
delegates[Array.IndexOf(iterations, i)] = GetTime;
}
Task<DateTime>[] tasks = delegates
.AsParallel()
.Select(async task => await task())
.ToArray();
await Task.WhenAll(tasks);
DateTime[] dateTimes = tasks
.Select(l => l.Result)
.ToArray();
foreach (DateTime dateTime in dateTimes)
Console.WriteLine(dateTime.ToString("yyyy-MM-dd HH:mm:ss.ffffff"));
Console.WriteLine("Range: " + (dateTimes.Max() - dateTimes.Min()).TotalMilliseconds);
Console.ReadKey();
}
}
我 100 次迭代的平均结果:
范围:7.6709
【问题讨论】:
-
确保任务同时运行的实际用例是什么,精确到纳秒?你这样做是为了达到什么目的?
-
收集时间敏感数据。
-
收集什么时间敏感数据?再说一遍:你想解决什么实际问题?
-
它们是非常必要的。 help page for Stack Overflow says“您应该只根据您面临的实际问题提出实际的、可回答的问题”。目前尚不清楚这其中的哪一部分是实用的。它还可以指导答案,因为您正在做一些非常不寻常的事情并且不清楚原因。
-
如果你想做这样的事情,你需要在硬件层面做,当然不是在垃圾收集环境中。在之前的生命周期中,我们在一个控制系统中做到了这一点,该系统使用两个共享时序的隔离处理器和一个受控访问的处理器间总线——所有这些都是用 C 和 C++ 编程的。即便如此,它也是毫秒级的。
标签: c# .net-core parallel-processing simultaneous