task-parallel-library相关内容

AspNetSynchronizationContext 并等待 ASP.NET 中的延续

在异步 ASP.NET Web API 控制器方法中的 await 之后,我注意到一个意外的(我会说是冗余的)线程切换. 例如,下面我希望在位置 #2 和 3# 处看到相同的 ManagedThreadId,但大多数情况下我在 #3 处看到不同的线程: 公共类 TestController : ApiController{公共异步任务获取数据(){Debug.WriteLine(new{w ..
发布时间:2021-12-27 23:35:41 C#/.NET

任务构造函数 vs Task.Run with async Action - 不同的行为

谁能解释一下这个,也许我遗漏了一些明显的东西. 这两种情况在行为上似乎相同,但实际上并非如此. 案例 1: 用一个 async Action, 开始一个任务,它会在一段时间内完成一些工作: var t = Task.Run(async () => { await Task.Delay(2000); }); 第二个任务等待第一个: var waitingTask = Task ..
发布时间:2021-12-27 23:32:50 C#/.NET

不能等待异步 lambda

考虑一下, Task task = new Task(async() =>{等待 TaskEx.Delay(1000);});task.Start();任务.等待(); 调用 task.Wait() 不会等待任务完成并立即执行下一行,但如果我将异步 lambda 表达式包装到方法调用中,代码会按预期工作. 私有静态异步任务AwaitableMethod(){等待 TaskEx.Delay(1 ..
发布时间:2021-12-27 23:30:18 C#/.NET

缺乏非捕获 Task.Yield 迫使我使用 Task.Run,​​为什么要遵循呢?

如果此问题是基于意见的,请提前道歉.缺乏 Task.Yield此处已经讨论了不会捕获执行上下文的版本.显然,此功能在早期版本的 Async CTP 中以某种形式存在,但由于很容易被误用而被删除. IMO,这样的功能很容易被误用,就像 Task.Run 本身一样.这就是我的意思.想象一下,有一个可等待的 SwitchContext.Yield API,它在 ThreadPool 上调度继续,因 ..
发布时间:2021-12-27 23:29:37 C#/.NET

多个等待 vs Task.WaitAll - 等效吗?

在性能方面,这两个方法会同时运行 GetAllWidgets() 和 GetAllFoos() 吗? 有什么理由使用一个而不是另一个吗?编译器的幕后似乎发生了很多事情,所以我不清楚. ============ 方法A:使用多个等待====================== 公共异步任务方法A(){var customer = new Customer();customer.Widg ..
发布时间:2021-12-27 23:26:56 C#/.NET

使用 await 时 Monitor.Exit 上的 SynchronizationLockException

我正在创建一段代码,用于从我们拥有的遗留系统中获取网页.为了避免过多的查询,我缓存了获取到的URL.我正在使用 Monitor.Enter、Monitor.Exit 和双重检查以避免该请求被发出两次,但是当使用 Monitor.Exit,我收到此异常: System.Threading.SynchronizationLockException 被捕获HResult=-2146233064Mess ..

如果我的接口必须返回 Task,那么实现无操作的最佳方法是什么?

在下面的代码中,由于接口的原因,LazyBar 类必须从它的方法中返回一个任务(并且为了参数不能改变).如果 LazyBar 的实现不寻常,因为它碰巧快速且同步地运行 - 从该方法返回 No-Operation 任务的最佳方法是什么? 我已经使用了下面的 Task.Delay(0),但是我想知道如果该函数被称为 lot 是否有任何性能副作用(为了论证,每秒说数百次): 这个句法糖是否可 ..
发布时间:2021-12-27 23:22:10 C#/.NET

如何防止任务上的同步延续?

我有一些库(套接字网络)代码,它提供了一个基于 Task 的 API,用于基于 TaskCompletionSource 的待处理请求响应.然而,在 TPL 中有一个烦恼,因为它似乎不可能阻止同步延续.我希望能够做的是: 告诉 TaskCompletionSource 不允许调用者附加 TaskContinuationOptions.ExecuteSynchronously,或 以指定应忽 ..
发布时间:2021-12-27 23:20:09 C#/.NET

重温 Task.ConfigureAwait(continueOnCapturedContext: false)

阅读时间太长. 使用 Task.ConfigureAwait(continueOnCapturedContext: false) 可能会引入冗余线程切换.我正在为此寻找一致的解决方案. 长版本.ConfigureAwait(false) 背后的主要设计目标是减少 await 的冗余 SynchronizationContext.Post 继续回调,在可能的情况下.这通常意味着更少的线程切换和 ..
发布时间:2021-12-27 23:19:05 C#/.NET

在任务中等待 async/await

我的 main() 中有这个构造,它创建了 var tasks = new List();var t = Task.Factory.StartNew(异步 () =>{Foo.Fim();等待 Foo.DoBar();});//DoBar未完成t.等待();//Foo.Fim() 完成,Foo.DoBar 应该但不是 然而,当我 .Wait for t 时,它不会等待对 DoBar() 的调用 ..
发布时间:2021-12-27 23:18:36 C#/.NET

Task.FromResult 有什么用?在 C# 中

在 C# 和 TPL(任务并行库)中,Task class 表示正在进行的工作,该工作产生类型 T 的值. 我想知道 Task.FromResult 方法需要什么? 也就是说:在你手头已经有了产生的值的情况下,还有什么需要把它包装回一个任务? 唯一想到的是它被用作接受 Task 实例的其他方法的一些适配器. 解决方案 我发现了两个常见的用例: 当您实现一个允许异步调 ..
发布时间:2021-12-27 23:16:35 C#/.NET

await 和 ContinueWith 之间的区别

有人可以解释一下以下示例中 await 和 ContinueWith 是否是同义词.我是第一次尝试使用 TPL,并且已经阅读了所有文档,但不明白其中的区别. 等待: String webText = await getWebPage(uri);等待 parseData(webText); 继续: TaskwebText = new Task(() => getWebPage(uri)) ..
发布时间:2021-12-27 23:15:38 C#/.NET

有没有办法判断任务并行库中当前正在运行哪些任务?

我看不到查看哪些任务正在运行的方法.有 Task.Current 属性,但是如果有多个任务在运行呢?有没有办法获得这种信息? 或者,是否有一种内置方式可以在任务开始或完成时获得通知? 解决方案 嘿 Mike,在 TPL 中没有访问待处理任务列表的公共方式.使其可用于调试器的机制依赖于所有线程将在枚举时被冻结的事实,因此它不能在运行时使用. 是的,有一种内置方式可以在任务完成时收 ..
发布时间:2021-12-25 08:33:39 其他开发