csharp System.Collections.Concurrent.BlockingCollectionのサンプル
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp System.Collections.Concurrent.BlockingCollectionのサンプル相关的知识,希望对你有一定的参考价值。
void Main()
{
Exec().Wait();
}
async Task Exec()
{
using(var bc = new BlockingCollection<string>())
{
await Task.WhenAll(ProduceAsync(bc), ConsumeAsync(bc)).ContinueWith((pt) =>
{
"=== THE END ===".Dump();
});
"Dispose BlockingCollection....".Dump();
}
}
Task ProduceAsync(BlockingCollection<string> bc)
{
return Task.Run(async () =>
{
await Task.WhenAll(AddAsync(bc, 1, 10, 250), AddAsync(bc, 250, 10, 300));
bc.CompleteAdding();
});
}
Task AddAsync(BlockingCollection<string> bc, int startNumber, int count, int delay)
{
return Task.Run(async () =>
{
foreach (var i in Enumerable.Range(startNumber, count))
{
bc.Add(string.Format("number {0:D3} : ThreadId={1:D2}", i, Thread.CurrentThread.ManagedThreadId));
await Task.Delay(delay);
}
});
}
Task ConsumeAsync(BlockingCollection<string> bc)
{
return Task.Run(() =>
{
foreach (var item in bc.GetConsumingEnumerable())
{
item.Dump();
}
});
}
以上是关于csharp System.Collections.Concurrent.BlockingCollectionのサンプル的主要内容,如果未能解决你的问题,请参考以下文章
csharp 集合的并发,避免使用传统的锁(lock)机制等方式来处理并发访问集合。因此当有多个线程并发访问集合时,应首先考虑使用这些类代替System.Collections和System.Coll
配置文件——WebApp.config文件读取和修改
模仿ICE的structured panorama小按钮
System.Collections.Generic vs System.Collections? [复制]
获取 System.Collections.Generic.List1[System.Collections.Generic.KeyValuePair2[System.Int32,System.Str
参数 1:无法从 'System.Collections.Generic.List' 转换为 'System.Collections.Generic.List'