草庐IT

task-parallel-library

全部标签

c# - C# 5.0 的异步等待功能与 TPL 有何不同?

我看不出C#(和VB)的新异步特性和.NET4.0的TaskParallelLibrary之间有什么不同.以EricLippert的代码fromhere为例:asyncvoidArchiveDocuments(Listurls){Taskarchive=null;for(inti=0;iawait关键字似乎有两个不同的用途。第一次出现(FetchAsync)似乎意味着,“如果此值稍后在方法中使用并且其任务未完成,请等到它完成后再使用继续。”第二个实例(archive)似乎意味着,“如果此任务尚未完成,请立即等待它完成。"如果我错了,请纠正我。这样写不就这么简单吗?voidArchive

c# - 有没有类似异步 BlockingCollection<T> 的东西?

我想await关于BlockingCollection.Take()的结果异步,所以我不阻塞线程。寻找这样的东西:varitem=awaitblockingCollection.TakeAsync();我知道我可以做到:varitem=awaitTask.Run(()=>blockingCollection.Take());但这有点扼杀了整个想法,因为另一个线程(ThreadPool)被阻塞了。还有其他选择吗? 最佳答案 我知道有四种选择。第一个是Channels,它提供了一个支持异步的线程安全队列Read和Write操作。chan

c# - 有没有类似异步 BlockingCollection<T> 的东西?

我想await关于BlockingCollection.Take()的结果异步,所以我不阻塞线程。寻找这样的东西:varitem=awaitblockingCollection.TakeAsync();我知道我可以做到:varitem=awaitTask.Run(()=>blockingCollection.Take());但这有点扼杀了整个想法,因为另一个线程(ThreadPool)被阻塞了。还有其他选择吗? 最佳答案 我知道有四种选择。第一个是Channels,它提供了一个支持异步的线程安全队列Read和Write操作。chan

c# - "await Task.Run(); return;"和 "return Task.Run()"之间有什么区别吗?

这个问题在这里已经有了答案:Whyuseasyncandreturnawait,whenyoucanreturnTaskdirectly?(8个答案)关闭3个月前。下面两段代码在概念上有区别吗:asyncTaskTestAsync(){awaitTask.Run(()=>DoSomeWork());}和TaskTestAsync(){returnTask.Run(()=>DoSomeWork());}生成的代码是否也不同?编辑:为避免与Task.Run混淆,类似情况:asyncTaskTestAsync(){awaitTask.Delay(1000);}和TaskTestAsync()

c# - "await Task.Run(); return;"和 "return Task.Run()"之间有什么区别吗?

这个问题在这里已经有了答案:Whyuseasyncandreturnawait,whenyoucanreturnTaskdirectly?(8个答案)关闭3个月前。下面两段代码在概念上有区别吗:asyncTaskTestAsync(){awaitTask.Run(()=>DoSomeWork());}和TaskTestAsync(){returnTask.Run(()=>DoSomeWork());}生成的代码是否也不同?编辑:为避免与Task.Run混淆,类似情况:asyncTaskTestAsync(){awaitTask.Delay(1000);}和TaskTestAsync()

c# - 使用异步 lambda 的并行 foreach

我想并行处理一个集合,但我在实现它时遇到了问题,因此我希望得到一些帮助。如果我想在并行循环的lambda中调用C#中标记为async的方法,就会出现问题。例如:varbag=newConcurrentBag();Parallel.ForEach(myCollection,asyncitem=>{//someprestuffvarresponse=awaitGetData(item);bag.Add(response);//somepoststuff}varcount=bag.Count;问题发生在计数为0时,因为创建的所有线程实际上只是后台线程,而Parallel.ForEach调用不

c# - 使用异步 lambda 的并行 foreach

我想并行处理一个集合,但我在实现它时遇到了问题,因此我希望得到一些帮助。如果我想在并行循环的lambda中调用C#中标记为async的方法,就会出现问题。例如:varbag=newConcurrentBag();Parallel.ForEach(myCollection,asyncitem=>{//someprestuffvarresponse=awaitGetData(item);bag.Add(response);//somepoststuff}varcount=bag.Count;问题发生在计数为0时,因为创建的所有线程实际上只是后台线程,而Parallel.ForEach调用不

c# - 打破 parallel.foreach?

我如何突破parallel.for循环?我有一个非常复杂的语句,如下所示:Parallel.ForEach(ColorIndex.AsEnumerable(),newAction((ColorIndexHolderElement)=>{if(Element.StartIndex=I){Found=true;break;}}));使用并行类,我可以优化这个过程。然而;我不知道如何打破并行循环?break;语句抛出以下语法错误:Noenclosingloopsoutofwhichtobreakorcontinue 最佳答案 使用Para

c# - 打破 parallel.foreach?

我如何突破parallel.for循环?我有一个非常复杂的语句,如下所示:Parallel.ForEach(ColorIndex.AsEnumerable(),newAction((ColorIndexHolderElement)=>{if(Element.StartIndex=I){Found=true;break;}}));使用并行类,我可以优化这个过程。然而;我不知道如何打破并行循环?break;语句抛出以下语法错误:Noenclosingloopsoutofwhichtobreakorcontinue 最佳答案 使用Para

c# - 为什么当我尝试访问我的任务的结果属性时此异步操作挂起?

我有一个多层.Net4.5应用程序调用一个使用C#的新async和await关键字的方法,但我不明白为什么会挂起。在底部,我有一个扩展我们的数据库实用程序OurDBConn的异步方法(基本上是底层DBConnection和DBCommand对象的包装器):publicstaticasyncTaskExecuteAsync(thisOurDBConndataSource,Funcfunction){stringconnectionString=dataSource.ConnectionString;//StarttheSQLandpassbacktothecalleruntilfinis