c#并发IO请求基础知识
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#并发IO请求基础知识相关的知识,希望对你有一定的参考价值。
我在c#和相关的async-await模式中遇到并发问题。
我面临性能问题,因为我需要使用多个数据库提供程序。 _schedulesProvider
拥有各种供应商。我真的不想改变任何东西,但我的想法是同时执行那些昂贵的I / O操作。我知道在这里使用await async是理想的,以便在等待I / O操作完成时不阻塞调用线程,但此刻我并不是真的很烦。
考虑以下代码:
//queuing all the expensive code in tasks
List<Task> scheduleProviderTasks = _schedulesProvider.Select(scheduleProvider =>
{
return
Task.Run(() =>
{
//expensive I/O operation
var schedules = scheduleProvider.Get();
if (!schedules.Schedules.Any())
{
return;
}
//do some stuff with the result
schedules.Schedules.ForEach(x =>
{
DoSomething(x);
});
});
}).ToList();
//run all tasks
scheduleProviderTasks.ForEach(x=>x.RunSynchronously());
我期待的是:
由于昂贵的操作并行运行,此操作的成本现在应该低得多。
当前的线程被阻止,直到qazxsw poi
因此所有操作都已完成。
这是真的?我应该重构这段代码吗?
我想知道Task.WaitAll是否可能对您的情况有所帮助。
以下是并行执行4 x 1秒任务的示例,其中总时间为2.6706808秒。
scheduleProviderTasks.ForEach(x=>x.RunSynchronously());
输出的地方是:
与B @ 00:00:01.0638455完成
用A @ 00:00:01.0673050完成
用D @ 00:00:02.5961501完成
用C @ 00:00:02.5962068完成
完成@ 00:00:02.6706808
以上是关于c#并发IO请求基础知识的主要内容,如果未能解决你的问题,请参考以下文章
csharp C#代码片段 - 使类成为Singleton模式。 (C#4.0+)https://heiswayi.github.io/2016/simple-singleton-pattern-us
全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段
C#-WebForm-★内置对象简介★Request-获取请求对象Response相应请求对象Session全局变量(私有)Cookie全局变量(私有)Application全局公共变量Vi(代码片段