task-parallel-library相关内容

如果没有等待异步任务在哪里抛出异常?

我有下面的例子:(也请阅读代码中的注释,因为它会更有意义) public async Task>MyAsyncMethod(){任务resultTask = await _mySender.PostAsync();返回结果任务;//在现实生活中,这将返回到另一个我无法更改的程序集//但我需要对这里的 Result 做一些异常处理} 让我们假设 _mySender 的 PostAsync ..
发布时间:2021-11-24 09:56:33 C#/.NET

从 .Net Frameworkf v.4.0 到 4.5 还发生了哪些其他无声变化?

我们希望切换到 .net 4.5,因为它提供了许多改进. 但是...有时我会发现一些棘手的细节,关于框架中的重大变化. 让我们以未观察到的 TPL 异常处理为例: 如果您不等待传播异常的任务,或访问它的 Exception 属性,异常根据任务被垃圾收集时的 .NET 异常策略.(注意,“例外政策"一词没有链接或说明) 嗯,这似乎是 .Net v.4.0 中的行为 但是 ..
发布时间:2021-11-24 09:50:59 C#/.NET

.NET 4 等效于 Task.WhenAll()

在 .NET 4 中,是否有任何功能等同于 .NET 4.5 的 System.Threading.Tasks.Task.WhenAll()? 目标是将多个异步任务合并为一个,并在其所有组成任务完成后完成. 解决方案 我认为 .Net 4.0 内置的最接近的东西是 ContinueWhenAll().您可以使 continuationAction 成为一个简单的 tasks =>任务 ..
发布时间:2021-11-24 09:49:42 C#/.NET

Task.WaitAll 不等待任务完成

在尝试找出新的(现在可能不是那么新,但对我来说是新的)Task 用 C# 异步编程时,我遇到了一个问题,我花了一些时间才弄清楚,我不知道为什么. 我已经解决了这个问题,但我仍然不确定为什么它是一个问题.我只是想我会分享我的经验,以防有人遇到同样的情况. 如果有任何专家想告诉我问题的原因,那将是非常棒的,非常感谢.我总是喜欢知道为什么有些东西不起作用! 我做了一个测试任务,如下: ..
发布时间:2021-11-24 09:49:34 C#/.NET

异步方法正确吗?Resharper警告

在我的方法 RecalcChartAsync 中,我做了一些时间密集的事情..所以我想我会做一些异步的事情. 我想启动两个方法 CreateHistogramAsync CalculatePropValuesAsync 同时在我的 RecalcChartsAsync 中做一些事情,最后等待它完成. private async void RecalcChartsAsync(){var hi ..
发布时间:2021-11-24 09:42:40 C#/.NET

CancellationTokenSource.CancelAfter() 是否泄漏?

提示 Async Targeting Pack 的发布我使用 ILSpy 来看看 基于任务的异步模式 (TAP) 扩展方法(其中一些我已经在我自己的用于 VS2010).我偶然发现了 .CancelAfter(TimeSpan) CancellationTokenSource 的方法(作为 .NET 4.0 的异步目标包中的扩展方法,但在 .NET 4.5 中是一个实例方法)) 并认为这可能是为各 ..
发布时间:2021-11-24 09:41:43 C#/.NET

如何将 async/await 与使用基于事件的异步模式的库一起使用?

我使用的库有一个名为 DoWork(...) 的异步方法,该方法会在操作完成时引发 WorkDone 事件. 我想编写一个调用这个库的方法,但我希望我的方法不是保持相同的模式,而是 async 这样它就可以用 await 调用>. 本质上,我想做的是: 公共异步任务一些方法(){var result = new Task();library.WorkDone +=(数据)=>{结果. ..
发布时间:2021-11-24 09:39:27 C#/.NET

任务并行库代码在 Windows 窗体应用程序中冻结 - 作为 Windows 控制台应用程序工作正常

这个问题是我之前提出的一个问题的后续问题: 如何执行多个“Ping"并行使用 C# 我能够使接受的答案(Windows 控制台应用程序)工作,但是当我尝试在 Windows 窗体应用程序中运行代码时,以下代码将冻结在包含 Task.WaitAll(pingTasks.ToArray()).这是我尝试运行的代码: 使用系统;使用 System.Collections.Generic;使 ..
发布时间:2021-11-24 09:32:43 C#/.NET

C# 5 中的异常处理和遗忘(在 .net 4.5 中)

考虑以下“即发即忘"用例: 调用者从我的方法请求一些数据.我的方法检查缓存以查看数据是否已经存在.如果不是,它会从源中获取并缓存它.调用者在获取结果之前不需要等待缓存发生,并且如果缓存发生失败,该方法不应该阻止调用者获取结果.我今天所拥有的,看起来像这样: public Foo GetFoo(string fooKey){//在缓存中查找带有 fooKey 的 Foo//如果没有找到 Fo ..

任务没有被垃圾收集

在下面的程序中,我希望任务能够被 GC 处理,但事实并非如此.我使用了一个内存分析器,它显示 CancellationTokenSource 持有对它的引用,即使任务显然处于最终状态.如果我删除 TaskContinuationOptions.OnlyOnRanToCompletion,一切都会按预期进行. 为什么会发生这种情况,我可以做些什么来防止它? static void Main ..
发布时间:2021-11-24 09:31:36 C#/.NET

为什么 Task.Delay() 允许无限延迟?

在我的应用程序冻结后,我找到了一个线程正在等待由 Task.Delay()(或 .NET 中的 TaskEx.Delay() 创建的任务的原因)4.0),它提供了一个计算出的 TimeSpan,由于一个错误,它有时被计算为 TimeSpan 的 TotalMilliseconds 小于或等于 -1 且大于 -2(即 -10000 到 -19999 滴答之间的任何位置,含). 看起来,当您传递 ..
发布时间:2021-11-24 09:29:54 C#/.NET

Task.Run 在静态初始化器中

考虑以下代码. 静态类X{public static int Value = Task.Run(() => 0).Result;}课程计划{静态无效主(字符串 [] args){var 值 = X.Value;}} 在静态初始化程序中调用 Task.Run 和 Result 会导致程序永久冻结.为什么? 解决方案 您看到 CLR 的类初始化锁出现死锁. 基本上,在类初始化之前,X ..
发布时间:2021-11-24 09:28:46 C#/.NET

一个任务可以有多个等待者吗?

我正在尝试为 Windows 8 项目提供异步服务,并且该服务有一些异步调用,一次只能调用一次. 公共异步任务 CallThisOnlyOnce(){传播某些事件();等待 SomeOtherMethod();传播不同的事件();} 由于不能在 lock 语句中封装异步调用,我想到了使用 AsyncLock 模式,但比我想的还不如尝试这样的方法: 私人任务 _callThisOnlyOn ..
发布时间:2021-11-24 09:22:21 C#/.NET

将任务作为参数传递

我不确定这是否可行,所以我来了: 我有一系列动作来执行多个 异步任务方法A(...){//一些代码//调用特定的异步 IO 绑定方法//一些代码} 还有MethodB()、MethodC()等,除了调用特定的Async IO绑定方法外,它们的代码完全相同.我试图找到一种方法将任务指针传递给方法,以便我们稍后可以在 Method() 中执行它. 我目前正在做的是: 私有异步任务方法 ..
发布时间:2021-11-24 09:20:43 C#/.NET

Task.WhenAny 和未观察到的异常

假设我有三个任务,a、b 和 c.所有三个都保证在 1 到 5 秒之间的随机时间抛出异常.然后我写了下面的代码: await Task.WhenAny(a, b, c); 这最终会从首先出现故障的任务中抛出异常.由于这里没有 try...catch,这个异常会冒泡到我代码中的其他地方. 当剩下的两个任务抛出异常时会发生什么?这些不是观察不到的异常,会导致整个进程被杀死吗?这是否意味着使用 ..
发布时间:2021-11-24 09:19:31 C#/.NET

异步/等待.在哪里执行方法的可等待部分的继续?

我真的很好奇 async/await 如何使您的程序不被停止.我真的很喜欢 Stephen Cleary 如何解释 async/await:“我喜欢把“await"看作是“异步等待".也就是说,async 方法会暂停,直到 awaitable 完成(所以它等待),但实际线程并没有被阻塞(所以它是异步的))." 我读过 async 方法同步工作,直到编译器遇到 await 关键字.好.如果编译 ..
发布时间:2021-11-24 09:13:24 C#/.NET

执行永无止境的任务的正确方法.(计时器与任务)

因此,只要应用程序正在运行或请求取消,我的应用程序就需要几乎连续执行操作(每次运行之间暂停 10 秒左右).它需要做的工作最多可能需要 30 秒. 最好使用 System.Timers.Timer 并使用 AutoReset 来确保它在前一个“滴答"完成之前不执行操作. 或者我应该在 LongRunning 模式下使用带有取消标记的常规任务,并在其中使用常规的无限 while 循环来调 ..
发布时间:2021-11-24 09:00:04 C#/.NET