-
30 votesanswersviews
如何实现返回Task <T>的接口方法?
我有一个界面 interface IFoo { Task<Bar> CreateBarAsync(); } 有两种方法可以创建 Bar ,一种是异步,另一种是同步 . 我想为这两种方法中的每一种提供接口实现 . 对于异步方法,实现可能如下所示: class Foo1 : IFoo { async Task<Bar> CreateBarAsync() { ... -
75 votesanswersviews
导致死锁的异步/等待示例
我使用c#的 async / await 关键字(我是c#5.0的新手)遇到了一些异步编程的最佳实践 . 给出的建议之一是: Stability: Know your synchronization contexts ...某些同步上下文是不可重入和单线程的 . 这意味着在给定时间内只能在上下文中执行一个工作单元 . 一个例子是Windows UI线程或ASP.NET请求上下文 . 在这些单线... -
12 votesanswersviews
即使在Asp.Net流中使用ConfigureAwait(false)后死锁也是如此
即使在使用 ConfigureAwait(false) 之后我也遇到了死锁,下面是示例代码 . 根据示例http://blog.stephencleary.com/2012/02/async-and-await.html(#Avoding Context),这不应该是命中死锁 . This is my class : public class ProjectsRetriever { pub... -
3 votesanswersviews
最后一个方法行上的Task.ConfigureAwait(false)是否会影响任何内容?
我知道在正在等待的任务上调用ConfigureAwait(false)有时会产生性能优势,因为它可以防止不必要的返回原始SynchroniZationContext . 例如: async Task Something() { // Let's say I'm on the UI context //... await AnotherTask.ConfigureAwait(fal... -
63 votesanswersviews
与异步lambda并行的foreach
我想并行处理一个集合,但是我在实现它时遇到了麻烦,因此我希望得到一些帮助 . 如果我想在并行循环的lambda中调用C#中标记为async的方法,则会出现问题 . 例如: var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, async item => { // some pre stuff... -
-2 votesanswersviews
关于正则表达式的并行foreach问题
我需要帮助将这个for循环转换为并行的forloop . public void spellchecker() { Invoke(new MethodInvoker(delegate () { using (Hunspell hunspell = new Hunspell("en_us.aff", "en_US.dic&q... -
1 votesanswersviews
并行使用TPL中预期的双线程
我将从一个基本的解释开始,我将如何理解一些工作,然后用tldr结束这一切;如果人们只是希望达到我在这里的实际问题 . 如果我对这里的任何事情的理解是错误的,请纠正我 . TPL代表任务并行库,它是.NET 4.0的答案,试图进一步简化线程以方便开发人员使用 . 如果你不熟悉它,(在一个非常基础的层面上)你启动一个新的Task对象并传递一个委托,然后在一个从线程池中取出的后台线程上运行(通过使用线程... -
8 votesanswersviews
这是正确的实施吗?
我有一个需要从数据库中选择作业并需要处理它的Windows服务 . 在这里,每项工作都是一个扫描过程,大约需要10分钟才能完成 . 我是任务并行库的新手 . 我已经按以下方式实现了示例逻辑: Queue queue = new Queue(); for (int i = 0; i < 10000; i++) { queue.Enqueue(i); } for (int i = 0... -
1 votesanswersviews
Parallel.For和/或Parallel.ForEach不会产生新线程
为了完整起见,我在这里搜索并阅读了其他文章,例如: Parallel.ForEach not spinning up new threads 但他们似乎没有解决我的情况,所以关闭我们去: 我有一个数组结构的Parallel.ForEach,如下所示: Dim opts As New ParallelOptions opts.MaxDegreeOfParallelism = intThreads ... -
0 votesanswersviews
不稳定的单元测试结果 - 模拟消息队列行为和并行循环
我正在构建一个类来使用并行循环来访问消息队列中的消息,为了解释我的问题,我创建了一个简化版本的代码: public class Worker { private IMessageQueue mq; public Worker(IMessageQueue mq) { this.mq = mq; } public int Concurrency... -
0 votesanswersviews
并行库MaxDegreeOfParallelism值?
我是线程和并行库的新手 . 我试图理解MaxDegreeOfParallelism以及它应该设置的值 . 做了一些阅读,对我来说可能有点误导 . 如果我想在4个线程上运行,我认为我可以做到 var parOptions=new ParallelOptions(); parOptions.MaxDegreeOfParallelism=4; 然而,做一些更多的阅读它看起来像在我的情况下4并不意味着在... -
1 votesanswersviews
设置默认文化 . 是特定于上下文的吗? (ASP.NET)
我很好奇一件事 . 在 Application_AcquireRequestState global.asax 事件中,我正在为将来创建的线程和当前正在执行的线程设置默认区域性 . 这是使用的代码 . CultureInfo.DefaultThreadCurrentCulture = new CultureInfo('some-CULTURE'); 原因如下 . 假设线程具有 fr-FR 的... -
4 votesanswersviews
无法将'void'类型隐式转换为'System.Threading.Tasks.Task'
这是我的代码的简化版本,下面是生成以下编译错误 无法将类型'void'隐式转换为'System.Threading.Tasks.Task' 在这种情况下,GetDataAsync方法不需要返回任何内容 . 如何让它返回我可以等待的任务? static async void Run() { List<string> IDs = new List<string>()... -
34 votesanswersviews
在同步方法中使用Task.Run()以避免异步方法等待死锁?
更新这个问题的目的是得到关于 Task.Run() 和死锁的简单答案 . 我非常理解不混合异步和同步的理论推理,我将它们铭记于心 . 我只需要一个人的技术答案...... 我有一个需要调用异步方法的 Dispose() 方法 . 由于95%的代码都是异步的,因此重构不是最佳选择 . 有一个 IAsyncDisposable (以及其他功能)'s supported by the framework... -
2 votesanswersviews
推荐使用TPL用于非常长的生命线程
我已经阅读了一些关于任务并行库(http://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx)的MSDN文档,特别是关于TPL的最佳实践用法 . 我有一个启动线程的应用程序 . 该线程的目的是监视队列并“处理”已添加的项目 . 队列中项目的处理需要按顺序进行,因此我不希望从队列中一次处理多个项目 . 只要windows进程,该线程就... -
0 votesanswersviews
对队列进行分区以进行并行处理
我正在编写一个从数千个客户端提取数据的服务器 . 我想并行处理这些数据,但必须按顺序串行处理每个客户端的数据 . 例如,如果我有客户端A,B和C,我将同时处理来自所有3个客户端的数据,但是每个客户端一次只处理一个项目 . 我的第一次尝试是创建一种分区队列,每个分区使用一个 Task 消息: ConcurrentDictionary<string, BlockingCollection<... -
3 votesanswersviews
在TPL中快速抛出未处理的异常
我的问题:我想在.NET 4和_644366下的WinForms应用程序中使用TPL吗?有可能吗? 在支持 async/await 支持的.NET 4.5中,可以编写: Public Class AwaitForm Inherits Form Private Async Sub Execute() Dim uiScheduler = TaskScheduler.F... -
315 votesanswersviews
如果我的接口必须返回Task,那么实现无操作的最佳方法是什么?
在下面的代码中,由于接口,类 LazyBar 必须从它返回一个任务's method (and for arguments sake can't被更改) . 如果 LazyBar 的实现很不寻常,因为它恰好快速且同步地运行 - 从方法返回No-Operation任务的最佳方法是什么? 我已经使用了下面的 Task.Delay(0) ,但是我想知道如果这个函数被调用了很多,那么这是否有任何性能副作用... -
189 votesanswersviews
Task.Start / Wait和Async / Await有什么区别?
我可能会遗漏一些东西但是做什么之间有什么不同: public void MyMethod() { Task t = Task.Factory.StartNew(DoSomethingThatTakesTime); t.Wait(); UpdateLabelToSayItsComplete(); } public async void MyMethod() { var result... -
139 votesanswersviews
Async / await vs BackgroundWorker
在过去的几天里,我测试了.net 4.5和c#5的新功能 . 我喜欢它的新async / await功能 . 之前我曾使用BackgroundWorker在后台处理响应式UI的更长进程 . 我的问题是:在拥有这些不错的新功能之后,我何时应该使用async / await和BackgroundWorker?两者的常见情况是什么? -
59 votesanswersviews
将基于回调的异步方法转换为等待任务的最佳方法
将使用回调的“经典”异步方法转换/包装到返回(等待)任务的东西的最佳方法是什么? 例如,给定以下方法: public void GetStringFromUrl(string url, Action<string> onCompleted); 我知道将它包装成返回任务的方法的唯一方法是: public Task<string> GetStringFromUrl(strin... -
2 votesanswersviews
有没有办法找出谁取消任务?
我知道这听起来很奇怪,但我正在尝试对我们的API进行简单的性能测试,并且取消了导致我的应用程序错误和响应失败的请求 . 我可以看看谁发起了取消吗? 2018-03-12 14:37:10.656 00:00(BettingAPI)(BettingApi)[错误]执行fetchers时抛出的异常,sessionInfo - “siteId:1,customerId:2231,sessionId:... -
7 votesanswersviews
从.Net Frameworkf v.4.0到4.5还发生了哪些其他无声的变化? [关闭]
我们想切换到.net 4.5,因为它提供了许多改进 . 但是......有时我发现了一些关于框架中不是微不足道的变化的棘手细节 . 让我们看看TPL未被观察到exception handling作为例子: 如果不等待传播异常的任务或访问其异常属性,则在对任务进行垃圾回收时,将根据.NET异常策略升级异常 . (注意,“例外政策”一词没有任何联系或澄清) 嗯,这似乎是.Net v.4.0中的行... -
3 votesanswersviews
确定适当的任务数
我正在开发一个小型库,它使用任务并行库来运行并行搜索解决方案 . 目前的设计符合以下方面: 一个ConcurrentQueue接收搜索结果, 一个主任务作为循环工作,作为后台线程运行 . 当新解决方案到达队列时,它会将其出列并进行处理,然后在新任务上启动新的搜索, a搜索在其自己的任务中启动,并在完成后将其结果返回到队列 . [根据Eric J的回答编辑:所涉及的活动完全受CPU限... -
5 votesanswersviews
当ContinueWith与System.Threading.Tasks.Task一起使用时,单元测试失败
我正在尝试为我的代码添加单元测试,我在TPL中使用 Task 将值更新到数据库中 . 对于单元测试,我使用 NUnit 和 Moq . 以下是我项目中的一些代码片段 . *//service* public interface IServiceFacade{ Task SynchronizeDataset (string datasetName); } *//The method cal... -
1 votesanswersviews
在异常时获取任务的状态
我正在构建一个需要执行许多并发任务的应用程序 . 这些任务包含对不同异步方法的多次调用(大多数情况下,它使用HttpClient查询一些REST API),中间有一些处理,我真的不想在任务中捕获异常 . 相反,我宁愿在使用WhenAny / WhenAll方法等待它们时这样做 . 当获得异常时,我还需要捕获该任务的一些源数据以供将来分析(例如,将其写入日志中) . 有一个Task.AsyncSta... -
435 votesanswersviews
为所有服务器端代码调用ConfigureAwait的最佳实践
当你有服务器端代码(即某些 ApiController )并且你的函数是异步的 - 所以它们返回 Task<SomeObject> - 你认为最好的做法是等待你调用 ConfigureAwait(false) 的函数吗? 我已经读过它更高效,因为它不必将线程上下文切换回原始线程上下文 . 但是,使用ASP.NET Web Api,如果您的请求是在一个线程上进行的,并且等待某个函数并... -
1 votesanswersviews
并行ForEach - 过度通话持续时间更长
我有一个函数,基本上以并行方式迭代以并行化以下过程: 获取网页 解析HTML代码 返回结果并添加到结果集合中 问题是第一次运行大约需要5分钟,第二次需要40分钟 . 输入集合不会更改,因此运行时间应非常相似 . 任何的想法? 我已经包含了GetPrices(int) . 第二次运行时,它以netstat中的0个连接开始(因此第一次吃掉可用连接时没有连接)但它只增加到5个连接(而不是... -
2 votesanswersviews
c#Parallel用于微小延迟的循环
我有一个非常简单的for循环,看起来像这样 for(int i = 0; i< 26; i++) { DoSomething(i); } DoSomething函数大约需要3分钟才能执行 . 我想写一个for循环,每分钟调用DoSomething()而不等待前一个调用完成 . 我试着这样做: Parallel.For(0, 26, i => { DoSomething... -
-1 votesanswersviews
指定默认的MaxDegreeOfParallelism会导致并行循环运行得更快
我正在使用System.Threading.Tasks.Parallel.ForEach() . 出于某种原因将MaxDegreeOfParallelism设置为“-1”或甚至“50”,导致循环运行得更快(大约15秒并且它是一致的) . MaxDegreeOfParallelism参数的默认值为-1,将其设置为50或任何其他数字应该只使其变慢 . 可能是什么原因? System.Collecti...