task-parallel-library相关内容
TL;DR:StaTaskScheduler 运行的任务内部出现死锁. 长版本: 我正在使用 StaTaskScheduler 来自 Parallel Team 的 ParallelExtensionsExtras,用于托管第三方提供的一些旧版 STA COM 对象.StaTaskScheduler 实现细节的描述如下: 好消息是 TPL 的实现可以在任一平台上运行MTA 或 STA
..
我编写了一个非常简单的“字数统计"程序,它读取文件并计算文件中每个单词的出现次数.以下是部分代码: 类阿拉基{私有静态列表输入 = 新列表();私有静态无效执行(int threadcount){ParallelOptions 选项 = 新的 ParallelOptions();options.MaxDegreeOfParallelism = 线程数;Parallel.For
..
我一直在为一些异步等待的东西苦苦挣扎.我正在使用 RabbitMQ 在某些程序之间发送/接收消息. 作为背景知识,RabbitMQ 客户端使用了 3 个左右的线程,我可以看到:一个连接线程和两个心跳线程.每当通过 TCP 接收到消息时,连接线程都会处理它并调用我通过接口提供的回调.文档说最好避免在此调用期间做大量工作,因为它在与连接相同的线程上完成,并且需要继续进行.他们提供了一个 Queu
..
我的应用程序中的所有服务调用都是作为任务实现的.当某个任务出现故障时,我需要向用户显示一个对话框来重试上次失败的操作.如果用户选择重试,程序应该重试该任务,否则程序的执行应该在记录异常后继续.任何人对如何实现这个功能有一个高层次的想法? 解决方案 UPDATE 5/2017 C# 6 异常过滤器使 catch 子句更加简单: 私有静态异步任务重试(Func fu
..
这是什么意思以及如何解决? 我正在使用 TPL 任务. 整个错误 在等待任务或访问其异常属性时未观察到任务的异常.结果,未观察到的异常被终结器线程重新抛出. 在 System.Threading.Tasks.TaskExceptionHolder.Finalize() mscorlib 解决方案 如果你创建了一个任务,并且你没有调用 task.Wait() 或
..
我有一个不返回数据的 async 方法: 公共异步任务 MyAsyncMethod(){//做一些异步的事情,不返回任何数据} 我从另一个返回一些数据的方法调用它: 公共字符串 GetStringData(){我的异步方法();//这会产生一个警告并吞下异常返回“你好世界";} 调用 MyAsyncMethod() 而不等待它会导致 "因为没有等待这个调用,所以当前方法在调用完成之前继续运
..
使用 Microsoft for .NET 的异步 CTP,是否可以在调用方法中捕获异步方法抛出的异常? public async void Foo(){var x = 等待 DoSomethingAsync();/* 处理结果,但有时可能会抛出异常.例如 DoSomethingAsync 从网络中获取数据并且数据无效......可能会引发 ProtocolException.*/}公共无效 D
..
一个常见的任务是在后台线程中做一些事情,然后在完成后将结果传递给 UI 线程并通知用户. 我知道有两种常见的方式: 我可以使用 TPL: var context = TaskScheduler.FromCurrentSynchronizationContext();Task.Factory.StartNew (() => {DoSomeExpensiveTask();return "
..
我有一个不返回任何内容的任务.您不能对此类任务执行 Async.AwaitTask,因此您需要执行 Async.AwaitIAsyncTask.不幸的是,这似乎只是吞下了基础任务抛出的任何异常:- TaskFactory().StartNew(Action(fun _ -> failwith "oops"))|>Async.AwaitIAsyncResult|>异步忽略|>Async.RunSy
..
我想知道这是否是一个过于宽泛的问题,但最近我让自己遇到了一段代码,我想确定如何从 C# 转换为正确的 F#.旅程从这里 (1) 开始(TPL-F# 交互的原始问题),以及继续这里 (2) (我正在考虑将一些示例代码翻译成 F#). 示例代码太长,无法在此重现,但有趣的功能是ActivateAsync、RefreshHubs 和AddHub.特别有趣的地方是 AddHub 有一个priv
..
到目前为止,在 VS2012 中使用“生成基于任务的操作"导入服务引用似乎不起作用.它变灰了. 针对 WPF 的新项目进行的测试工作正常 - 我可以选择基于任务或异步操作. 是否有将异步调用包装在任务中的简单方法? 解决方案 是否有将异步调用包装在任务中的简单方法? WebClient.DownloadStringCompleted 的示例 公共静态类 WebCl
..
我需要并行化一个方法,该方法对列表中的元素进行详尽的成对比较.串行实现很简单: foreach (var element1 in list)foreach(列表中的var element2)foo(element1, element2); 在这种情况下,foo 不会改变 element1 或 element2 的状态.我知道简单地执行嵌套的 Parallel.ForEach 语句是不安全的:
..
我从此处了解到Task.Whenall 不是确定性的,但我找不到有关结果顺序的任何信息. 结果集合是否会按照输入中的任务排序或结果可以按任何顺序包含结果? 从我做的测试来看,它似乎保留了订单,但我需要确认. 解决方案 来自 MSDN: Task.WhenAll(IEnumerable) 这是包含此语句的四个重载中唯一的一个: 如果没有任务发生故障并且没有任务被取消,则
..
问题 尽管我将在这里讨论的代码是用 F# 编写的,但它基于 .NET 4 框架,并不特别依赖于 F# 的任何特殊性(至少看起来如此!). 我的磁盘上有一些数据,我应该从网络更新,将最新版本保存到磁盘: type MyData ={ 字段 1:整数;字段 2 : 浮动 }输入 MyDataGroup ={ 数据:MyData[];编号:整数 }//加载:int ->我的数据组让加载 d
..
我们有一个 WPF 应用程序,它有一个带有缓存的 VirtualizingStackPanel 的 ListBox.不是因为它有大量的元素(通常少于 20,但在极端情况下可能高达 100 或更多),而是因为元素需要时间来生成.这些元素实际上是 UIElement 对象.所以应用程序需要动态生成UIElements. 问题是,即使虚拟化看起来可以工作,应用程序的响应速度仍然很慢,这是具有最小“
..
我需要从旧数据库中导入与客户相关的数据,并在此过程中执行多项转换.这意味着单个条目需要执行额外的“事件"(同步产品、创建发票等). 我最初的解决方案是一个简单的并行方法.它工作正常,但有时它有问题.如果当前处理的客户需要等待相同类型的事件,他们的处理队列可能会卡住并最终超时,导致每个底层事件也失败(它们取决于失败的事件).它不会一直发生,但很烦人. 所以我有了另一个想法,分批工作.我的
..
为什么在使用 GetConsumableEnumerable 时 Parallel.ForEach 循环以 OperationCancelledException 退出? //函数外静态 BlockingCollection_collection = new BlockingCollection();var t = Task.Factory.StartNew(Producer);Parallel
..
每次调用 Task.Factory.StartNew 时,我都会尝试创建一个新线程.问题是如何在不抛出异常的情况下运行下面的代码: static void Main(string[] args){int firstThreadId = 0;Task.Factory.StartNew(() => firstThreadId = Thread.CurrentThread.ManagedThreadI
..
我正在构建一个必须处理大量数据的控制台应用程序. 基本上,应用程序从数据库中获取引用.对于每个引用,解析文件的内容并进行一些更改.这些文件是 HTML 文件,该过程正在使用 RegEx 替换(查找引用并将它们转换为链接)进行繁重的工作.然后将结果存储在文件系统中并发送到外部系统. 如果我按顺序恢复该过程: var refs = GetReferencesFromDB();//~500
..
我调用了三种方法来进行一些数字运算,如下所示 results.LeftFront.CalcAi();results.RightFront.CalcAi();results.RearSuspension.CalcAi(geom, vehDef.Geometry.LTa.TaStiffness, vehDef.Geometry.RTa.TaStiffness); 每个函数都是相互独立的,可以并行计
..