c# - 在 C# .NET 5 中同时并行执行任务
问题描述
我试图在同一时间执行一系列任务,精确到纳秒。这可能吗?
似乎我添加的任务越多,不准确的范围就越大——这让我相信我做错了什么。
对此有最佳做法吗?
这是我得到的结果的代码:
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
解决方案
我试图在同一时间执行一系列任务,精确到纳秒。这可能吗?
不可以。这在任何使用抢占式调度的操作系统上都是不可能的,例如 Windows 或 Linux。
推荐阅读
- java - 两遍渲染的模糊内核分离
- php - 在 Codeigniter 中使用 form_helper 时无法填充字段
- javascript - css文件的笑话错误
- angular - 从 ts 文件中读取常量:在 angular2 中找不到 404 文件
- asp.net-core - IdentityServer4 使用 asp.net 核心中的密码授权请求 JWT / 访问承载令牌
- javascript - 如何用 sinon 监视由 EventEmitter 事件触发的回调调用?Javascript,ES6,单元测试,Chai
- hadoop - Hadoop 集群交互式用户的永久 Kerberos 票证
- sbt - %% 不起作用,但 % 在库依赖项中起作用
- c# - 如何将 Button 事件从 WPF 应用程序路由到 wcf 服务
- casperjs - 无法使用 CasperJS 下载文件