task-parallel-library相关内容
我有下面的例子:(也请阅读代码中的注释,因为它会更有意义) public async Task>MyAsyncMethod(){任务resultTask = await _mySender.PostAsync();返回结果任务;//在现实生活中,这将返回到另一个我无法更改的程序集//但我需要对这里的 Result 做一些异常处理} 让我们假设 _mySender 的 PostAsync
..
我们希望切换到 .net 4.5,因为它提供了许多改进. 但是...有时我会发现一些棘手的细节,关于框架中的重大变化. 让我们以未观察到的 TPL 异常处理为例: 如果您不等待传播异常的任务,或访问它的 Exception 属性,异常根据任务被垃圾收集时的 .NET 异常策略.(注意,“例外政策"一词没有链接或说明) 嗯,这似乎是 .Net v.4.0 中的行为 但是
..
在 .NET 4 中,是否有任何功能等同于 .NET 4.5 的 System.Threading.Tasks.Task.WhenAll()? 目标是将多个异步任务合并为一个,并在其所有组成任务完成后完成. 解决方案 我认为 .Net 4.0 内置的最接近的东西是 ContinueWhenAll().您可以使 continuationAction 成为一个简单的 tasks =>任务
..
在尝试找出新的(现在可能不是那么新,但对我来说是新的)Task 用 C# 异步编程时,我遇到了一个问题,我花了一些时间才弄清楚,我不知道为什么. 我已经解决了这个问题,但我仍然不确定为什么它是一个问题.我只是想我会分享我的经验,以防有人遇到同样的情况. 如果有任何专家想告诉我问题的原因,那将是非常棒的,非常感谢.我总是喜欢知道为什么有些东西不起作用! 我做了一个测试任务,如下:
..
在我的方法 RecalcChartAsync 中,我做了一些时间密集的事情..所以我想我会做一些异步的事情. 我想启动两个方法 CreateHistogramAsync CalculatePropValuesAsync 同时在我的 RecalcChartsAsync 中做一些事情,最后等待它完成. private async void RecalcChartsAsync(){var hi
..
提示 Async Targeting Pack 的发布我使用 ILSpy 来看看 基于任务的异步模式 (TAP) 扩展方法(其中一些我已经在我自己的用于 VS2010).我偶然发现了 .CancelAfter(TimeSpan) CancellationTokenSource 的方法(作为 .NET 4.0 的异步目标包中的扩展方法,但在 .NET 4.5 中是一个实例方法)) 并认为这可能是为各
..
我使用的库有一个名为 DoWork(...) 的异步方法,该方法会在操作完成时引发 WorkDone 事件. 我想编写一个调用这个库的方法,但我希望我的方法不是保持相同的模式,而是 async 这样它就可以用 await 调用>. 本质上,我想做的是: 公共异步任务一些方法(){var result = new Task();library.WorkDone +=(数据)=>{结果.
..
我正在使用 svcutil a la 使用预定义的 wsdl: svcutil some_service.wsdl 生成的方法之一具有以下签名: [System.ServiceModel.OperationContractAttribute(Action="http://ws.example.org/SubmitData", ReplyAction="*")]SubmitDataRespon
..
这个问题是我之前提出的一个问题的后续问题: 如何执行多个“Ping"并行使用 C# 我能够使接受的答案(Windows 控制台应用程序)工作,但是当我尝试在 Windows 窗体应用程序中运行代码时,以下代码将冻结在包含 Task.WaitAll(pingTasks.ToArray()).这是我尝试运行的代码: 使用系统;使用 System.Collections.Generic;使
..
考虑以下“即发即忘"用例: 调用者从我的方法请求一些数据.我的方法检查缓存以查看数据是否已经存在.如果不是,它会从源中获取并缓存它.调用者在获取结果之前不需要等待缓存发生,并且如果缓存发生失败,该方法不应该阻止调用者获取结果.我今天所拥有的,看起来像这样: public Foo GetFoo(string fooKey){//在缓存中查找带有 fooKey 的 Foo//如果没有找到 Fo
..
在下面的程序中,我希望任务能够被 GC 处理,但事实并非如此.我使用了一个内存分析器,它显示 CancellationTokenSource 持有对它的引用,即使任务显然处于最终状态.如果我删除 TaskContinuationOptions.OnlyOnRanToCompletion,一切都会按预期进行. 为什么会发生这种情况,我可以做些什么来防止它? static void Main
..
在我的应用程序冻结后,我找到了一个线程正在等待由 Task.Delay()(或 .NET 中的 TaskEx.Delay() 创建的任务的原因)4.0),它提供了一个计算出的 TimeSpan,由于一个错误,它有时被计算为 TimeSpan 的 TotalMilliseconds 小于或等于 -1 且大于 -2(即 -10000 到 -19999 滴答之间的任何位置,含). 看起来,当您传递
..
我有一个缓存类,它使用冷(未启动)任务来避免多次运行昂贵的东西. public class AsyncConcurrentDictionary: System.Collections.Concurrent.ConcurrentDictionary>{内部任务GetOrAddAsync(TKey key, Task newTask){var cachedTask = base.Ge
..
考虑以下代码. 静态类X{public static int Value = Task.Run(() => 0).Result;}课程计划{静态无效主(字符串 [] args){var 值 = X.Value;}} 在静态初始化程序中调用 Task.Run 和 Result 会导致程序永久冻结.为什么? 解决方案 您看到 CLR 的类初始化锁出现死锁. 基本上,在类初始化之前,X
..
我正在尝试为 Windows 8 项目提供异步服务,并且该服务有一些异步调用,一次只能调用一次. 公共异步任务 CallThisOnlyOnce(){传播某些事件();等待 SomeOtherMethod();传播不同的事件();} 由于不能在 lock 语句中封装异步调用,我想到了使用 AsyncLock 模式,但比我想的还不如尝试这样的方法: 私人任务 _callThisOnlyOn
..
我不确定这是否可行,所以我来了: 我有一系列动作来执行多个 异步任务方法A(...){//一些代码//调用特定的异步 IO 绑定方法//一些代码} 还有MethodB()、MethodC()等,除了调用特定的Async IO绑定方法外,它们的代码完全相同.我试图找到一种方法将任务指针传递给方法,以便我们稍后可以在 Method() 中执行它. 我目前正在做的是: 私有异步任务方法
..
假设我有三个任务,a、b 和 c.所有三个都保证在 1 到 5 秒之间的随机时间抛出异常.然后我写了下面的代码: await Task.WhenAny(a, b, c); 这最终会从首先出现故障的任务中抛出异常.由于这里没有 try...catch,这个异常会冒泡到我代码中的其他地方. 当剩下的两个任务抛出异常时会发生什么?这些不是观察不到的异常,会导致整个进程被杀死吗?这是否意味着使用
..
我真的很好奇 async/await 如何使您的程序不被停止.我真的很喜欢 Stephen Cleary 如何解释 async/await:“我喜欢把“await"看作是“异步等待".也就是说,async 方法会暂停,直到 awaitable 完成(所以它等待),但实际线程并没有被阻塞(所以它是异步的))." 我读过 async 方法同步工作,直到编译器遇到 await 关键字.好.如果编译
..
因此,只要应用程序正在运行或请求取消,我的应用程序就需要几乎连续执行操作(每次运行之间暂停 10 秒左右).它需要做的工作最多可能需要 30 秒. 最好使用 System.Timers.Timer 并使用 AutoReset 来确保它在前一个“滴答"完成之前不执行操作. 或者我应该在 LongRunning 模式下使用带有取消标记的常规任务,并在其中使用常规的无限 while 循环来调
..
我可能遗漏了一些东西,但这样做有什么区别: public void MyMethod(){任务 t = Task.Factory.StartNew(DoSomethingThatTakesTime);t.等待();UpdateLabelToSayItsComplete();}公共异步无效 MyMethod(){var 结果 = Task.Factory.StartNew(DoSomethingT
..