task-parallel-library相关内容

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

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

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

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

如何在不等待的情况下安全地调用 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

对多个任务使用 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

运行多个异步任务并等待它们全部完成

我需要在控制台应用程序中运行多个异步任务,并在进一步处理之前等待它们全部完成. 那里有很多文章,但我似乎越读越困惑.我已经阅读并理解了 Task 库的基本原理,但我显然在某处遗漏了一个链接. 我知道可以链接任务,以便它们在另一个完成后开始(这几乎是我读过的所有文章的场景),但我希望我的所有任务同时运行,而且我想要全部完成后才能知道. 对于这样的场景,最简单的实现是什么? 解 ..
发布时间:2021-11-30 13:30:44 C#/.NET

具有异步 lambda 的并行 foreach

我想并行处理一个集合,但我在实现它时遇到了麻烦,因此我希望得到一些帮助. 如果我想在并行循环的 lambda 内调用 C# 中标记为 async 的方法,就会出现问题.例如: var bag = new ConcurrentBag();Parallel.ForEach(myCollection, async item =>{//一些预先的东西var response = await Get ..
发布时间:2021-11-30 13:29:48 C#/.NET

WaitAll vs WhenAll

Async CTP 中的 Task.WaitAll() 和 Task.WhenAll() 有什么区别?您能否提供一些示例代码来说明不同的用例? 解决方案 Task.WaitAll 阻塞当前线程,直到一切都完成. Task.WhenAll 返回一个 task 表示等待一切完成的动作. 这意味着从异步方法中,您可以使用: await Task.WhenAll(tasks); . ..
发布时间:2021-11-30 13:29:37 C#/.NET

在 Parallel.ForEach 中嵌套 await

在 Metro 应用程序中,我需要执行多个 WCF 调用.需要进行大量调用,因此我需要在并行循环中执行它们.问题是并行循环在 WCF 调用全部完成之前就退出了. 您将如何重构它以使其按预期工作? var ids = new List() { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };var customer = new Syst ..
发布时间:2021-11-30 13:28:00 C#/.NET

导致死锁的异步/等待示例

我遇到了一些使用 c# 的 async/await 关键字进行异步编程的最佳实践(我是 c# 5.0 的新手). 给出的建议之一如下: 稳定性:了解您的同步上下文 ...一些同步上下文是不可重入的和单线程的.这意味着在给定时间只能在上下文中执行一个工作单元.这方面的一个示例是 Windows UI 线程或 ASP.NET 请求上下文.在这些单线程同步上下文中,很容易让自己陷入死锁 ..
发布时间:2021-11-30 13:27:24 C#/.NET

await vs Task.Wait - 死锁?

我不太明白 Task.Wait 和 await 之间的区别. 我在 ASP.NET WebAPI 服务中有类似于以下功能的东西: 公共类 TestController : ApiController{公共静态异步任务富(){等待 Task.Delay(1).ConfigureAwait(false);返回 "";}公共异步静态任务酒吧(){返回等待 Foo();}公共异步静态任务罗斯(){ ..
发布时间:2021-11-30 13:27:04 C#/.NET

为所有服务器端代码调用 ConfigureAwait 的最佳实践

当你有服务器端代码(即一些 ApiController)并且你的函数是异步的 - 所以它们返回 Task - 是否被认为是最佳实践等待调用 ConfigureAwait(false) 的函数的时间? 我读到它的性能更高,因为它不必将线程上下文切换回原始线程上下文.但是,对于 ASP.NET Web Api,如果您的请求来自一个线程,并且您等待某个函数并调用 ConfigureAwait(fa ..
发布时间:2021-11-29 08:54:03 C#/.NET

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

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