task-parallel-library相关内容

ASP.NET Web API OperationCanceledException 当浏览器取消请求时

当用户加载页面时,它会发出一个或多个 ajax 请求,这些请求会命中 ASP.NET Web API 2 控制器.如果用户导航到另一个页面,则在这些 ajax 请求完成之前,浏览器会取消这些请求.我们的 ELMAH HttpModule 然后为每个取消的请求记录两个错误: 错误 1: System.Threading.Tasks.TaskCanceledException:一个任务被取消. ..
发布时间:2021-12-02 09:27:45 C#/.NET

什么时候用Task.Delay,什么时候用Thread.Sleep?

是否有关于何时使用 Task.Delay 与 Thread.Sleep? 具体来说,是否有一个最小值可以让一个比另一个更有效/高效? 最后,由于 Task.Delay 导致 async/await 状态机上的上下文切换,使用它是否有开销? 解决方案 使用 Thread.Sleep 当你想阻塞当前线程时. 使用Task.Delay 当你想要一个逻辑延迟而不阻塞当前线程时. ..
发布时间:2021-12-01 10:04:55 C#/.NET

如何在超时后取消任务等待

我正在使用此方法以编程方式实例化 Web 浏览器,导航到 url 并在文档完成后返回结果. 如果文档加载时间超过 5 秒,我将如何停止 Task 并让 GetFinalUrl() 返回 null? 我已经看到许多使用 TaskFactory 的示例,但我无法将其应用于此代码. private Uri GetFinalUrl(PortalMerchant portalMerchant ..
发布时间:2021-12-01 09:49:25 C#/.NET

任务和线程有什么区别?

在 C# 4.0 中,我们在 System.Threading.Tasks 命名空间中有 Task.Thread 和 Task 之间的真正区别是什么.为了自己学习 ,我做了一些示例程序(来自MSDN的帮助) Parallel.Invoke平行.ForParallel.ForEach 但有很多疑问,因为想法不是那么清楚. 我最初在 Stackoverflow 中搜索了类似类型的问题,但可 ..
发布时间:2021-12-01 09:34:06 C#/.NET

异步等待 Task超时完成

我想等待 Task 完成并带有一些特殊规则:如果 X 毫秒后仍未完成,我想向用户显示一条消息.如果 Y 毫秒后仍未完成,我希望自动请求取消. 我可以使用 Task.ContinueWith 异步等待任务完成(即 安排在任务完成时执行的操作),但这不允许指定超时.我可以使用 Task.Wait 同步等待任务完成并超时,但是阻塞我的线程.如何异步等待任务完成并超时? 解决方案 这个怎么样 ..
发布时间:2021-12-01 09:11:18 C#/.NET

我们应该默认切换到使用异步 I/O 吗?

有了异步 I/O 的优势,并且现在很容易编码和组合(使用 Await 和 TAP 方法),我想知道我们是否应该默认使用异步,并且只在需要时使用同步来调整性能. 异步 ​​I/O 释放调用线程并允许在等待结果时做其他事情.另一方面,异步 I/O 比同步慢一点. 为了实施响应式 UI,WinRT 设计人员发现提供仅异步方法是可以接受的. AFAIK Windows 文件 I/O 内部 ..
发布时间:2021-11-30 13:45:12 C#/.NET

Task.Run 在 ASP .NET MVC Web 应用程序中被认为是不好的做法吗?

背景 我们目前正在开发一个 Web 应用程序,它依赖于 ASP .NET MVC 5、Angular.JS 1.4、Web API 2 和 Entity Framework 6.出于可扩展性的原因,Web 应用程序的繁重性依赖于 async/await 模式.我们的域需要一些 CPU 密集型计算,这可能需要几秒钟( 参见 Stephen Cleary 的博客文章),他们使用 Configur ..
发布时间:2021-11-30 13:38:58 C#/.NET

如何在 ASP.NET Web API 中使用非线程安全的异步/等待 API 和模式?

这个问题是由 EF Data Context - Async/Await & 触发的多线程.我已经回答了那个,但没有提供任何最终解决方案. 最初的问题是有很多有用的 .NET API(例如 Microsoft Entity Framework 的 DbContext),提供旨在与 await 一起使用的异步方法,但它们被记录为非线程安全.这使得它们非常适合在桌面 UI 应用程序中使用,但不适 ..
发布时间:2021-11-30 13:38:51 C#/.NET

同步等待一个异步操作,为什么Wait()会在这里冻结程序

前言:我在寻找一个解释,而不仅仅是一个解决方案.我已经知道解决方案了. 尽管花了几天时间研究 MSDN 上关于基于任务的异步模式 (TAP)、async 和 await 的文章,我仍然对一些更精细的细节感到困惑. 我正在为 Windows 应用商店应用编写一个记录器,我想同时支持异步和同步日志记录.异步方法遵循TAP,同步方法应该隐藏所有这些,并且看起来和工作起来像普通方法. 这 ..
发布时间:2021-11-30 13:38:14 C#/.NET

我想等待抛出 AggregateException,而不仅仅是第一个异常

当等待一个有错误的任务(设置了异常的任务)时,await 将重新抛出存储的异常.如果存储的异常是 AggregateException,它将重新抛出第一个并丢弃其余的. 如何在使用await的同时抛出原来的AggregateException,才不会不小心丢失错误信息? 请注意,当然可以为此想出一些骇人听闻的解决方案(例如,在 await 周围尝试捕获,然后调用 Task.Wait). ..
发布时间:2021-11-30 13:37:26 C#/.NET

使用 async/await 是否会创建一个新线程?

我是 TPL 的新手,我想知道:新的异步编程支持如何到 C# 5.0(通过新的 async 和 await 关键字)与线程的创建有关吗? 具体来说,async/await 的使用是否会在每次使用时创建一个新线程?如果有许多使用 async/await 的嵌套方法,是否为每个方法都创建了一个新线程? 解决方案 简而言之NO 来自 使用 Async 和 Await 进行异步编程:线 ..
发布时间:2021-11-30 13:36:19 C#/.NET

Parallel.ForEach 和 async-await

我有这样的方法: 公共异步任务获取结果(){MyResult 结果 = new MyResult();foreach(方法中的var方法){字符串 json = 等待进程(方法);result.Prop1 = PopulateProp1(json);result.Prop2 = PopulateProp2(json);}返回结果;} 然后我决定使用Parallel.ForEach: 公共异步 ..
发布时间:2021-11-30 13:36:11 C#/.NET

通用 FromEvent 方法

使用新的 async/await 模型,生成一个在事件触发时完成的 Task 相当简单;你只需要遵循这个模式: 公共类MyClass{公共事件 Action OnComplete;}公共静态任务 FromEvent(MyClass obj){TaskCompletionSourcetcs = new TaskCompletionSource();obj.OnCompletion += () => ..
发布时间:2021-11-30 13:36:04 C#/.NET

关于 Task.Start() , Task.Run() 和 Task.Factory.StartNew() 的使用

我刚刚看到了 3 个关于 TPL 使用的例程,它们可以完成相同的工作;这是代码: public static void Main(){Thread.CurrentThread.Name = "主";//创建任务并使用 lambda 表达式提供用户委托.任务 taskA = new Task( () => Console.WriteLine("Hello from taskA."));//开始任务 ..
发布时间:2021-11-30 13:35:26 C#/.NET

为什么我应该更喜欢单个“await Task.WhenAll"而不是多个等待?

如果我不关心任务完成的顺序,只需要它们全部完成,我还应该使用 await Task.WhenAll 而不是多个 await 吗?例如,DoWork2 是否低于 DoWork1 的首选方法(为什么?): 使用系统;使用 System.Threading.Tasks;命名空间 ConsoleApp{课程计划{静态异步任务DoTaskAsync(字符串名称,整数超时){var start = Date ..
发布时间:2021-11-30 13:35:08 C#/.NET

如何在不等待的情况下安全地调用 C# 中的异步方法

我有一个 async 方法,它不返回任何数据: 公共异步任务 MyAsyncMethod(){//做一些异步的事情,不返回任何数据} 我从另一个返回一些数据的方法调用它: 公共字符串 GetStringData(){MyAsyncMethod();//这会产生一个警告并吞下异常返回“你好世界";} 在不等待的情况下调用 MyAsyncMethod() 会导致“因为不等待这个调用,所以当前方 ..
发布时间:2021-11-30 13:33:59 C#/.NET

同步调用异步方法

我有一个 async 方法: public async Task生成代码异步(){字符串代码 = 等待 GenerateCodeService.GenerateCodeAsync();返回码;} 我需要从同步方法中调用此方法. 如何在不必复制 GenerateCodeAsync 方法的情况下执行此操作以使其同步工作? 更新 尚未找到合理的解决方案. 但是,我看到 Htt ..
发布时间:2021-11-30 13:33:20 C#/.NET

StaTaskScheduler 和 STA 线程消息泵

TL;DR:StaTaskScheduler 运行的任务内部出现死锁. 长版: 我正在使用 StaTaskScheduler 来自 Parallel Team 的 ParallelExtensionsExtras,用于托管第三方提供的一些遗留 STA COM 对象.StaTaskScheduler 实现细节的描述如下: 好消息是 TPL 的实现能够运行在MTA 或 STA 线程,并考虑 ..
发布时间:2021-11-30 13:32:53 C#/.NET

TAP 全局异常处理程序

此代码引发异常.是否可以定义一个应用程序全局处理程序来捕获它? string x = await DoSomethingAsync(); 使用 .net 4.5/WPF 解决方案 这实际上是一个好问题,如果我理解正确的话.我最初投票决定关闭它,但现在撤回了我的投票. 了解在 async Task 方法内部抛出的异常如何在其外部传播非常重要.最重要的是这种异常需要被处理完成任务的代 ..
发布时间:2021-11-30 13:32:17 C#/.NET

对多个任务使用 async/await

我使用的是完全异步的 API 客户端,也就是说,每个操作要么返回 Task 要么返回 Task,例如: static async Task DoSomething(int siteId, int postId, IBlogClient client){等待 client.DeletePost(siteId, postId);//调用API客户端Console.WriteLine("已删除帖子 { ..
发布时间:2021-11-30 13:31:56 C#/.NET