task-parallel-library相关内容
我是 TPL 的新手,我想知道:新的异步编程支持如何到 C# 5.0(通过新的 async 和 await 关键字)与线程的创建有关吗? 具体来说,async/await 的使用是否会在每次使用时创建一个新线程?如果有许多使用 async/await 的嵌套方法,是否为每个方法都创建了一个新线程? 解决方案 简而言之NO 来自 使用 Async 和 Await 进行异步编程:线
..
我有这样的方法: 公共异步任务获取结果(){MyResult 结果 = new MyResult();foreach(方法中的var方法){字符串 json = 等待进程(方法);result.Prop1 = PopulateProp1(json);result.Prop2 = PopulateProp2(json);}返回结果;} 然后我决定使用Parallel.ForEach: 公共异步
..
使用新的 async/await 模型,生成一个在事件触发时完成的 Task 相当简单;你只需要遵循这个模式: 公共类MyClass{公共事件 Action OnComplete;}公共静态任务 FromEvent(MyClass obj){TaskCompletionSourcetcs = new TaskCompletionSource();obj.OnCompletion += () =>
..
我刚刚看到了 3 个关于 TPL 使用的例程,它们可以完成相同的工作;这是代码: public static void Main(){Thread.CurrentThread.Name = "主";//创建任务并使用 lambda 表达式提供用户委托.任务 taskA = new Task( () => Console.WriteLine("Hello from taskA."));//开始任务
..
如果我不关心任务完成的顺序,只需要它们全部完成,我还应该使用 await Task.WhenAll 而不是多个 await 吗?例如,DoWork2 是否低于 DoWork1 的首选方法(为什么?): 使用系统;使用 System.Threading.Tasks;命名空间 ConsoleApp{课程计划{静态异步任务DoTaskAsync(字符串名称,整数超时){var start = Date
..
我有一个 async 方法,它不返回任何数据: 公共异步任务 MyAsyncMethod(){//做一些异步的事情,不返回任何数据} 我从另一个返回一些数据的方法调用它: 公共字符串 GetStringData(){MyAsyncMethod();//这会产生一个警告并吞下异常返回“你好世界";} 在不等待的情况下调用 MyAsyncMethod() 会导致“因为不等待这个调用,所以当前方
..
我有一个 async 方法: public async Task生成代码异步(){字符串代码 = 等待 GenerateCodeService.GenerateCodeAsync();返回码;} 我需要从同步方法中调用此方法. 如何在不必复制 GenerateCodeAsync 方法的情况下执行此操作以使其同步工作? 更新 尚未找到合理的解决方案. 但是,我看到 Htt
..
TL;DR:StaTaskScheduler 运行的任务内部出现死锁. 长版: 我正在使用 StaTaskScheduler 来自 Parallel Team 的 ParallelExtensionsExtras,用于托管第三方提供的一些遗留 STA COM 对象.StaTaskScheduler 实现细节的描述如下: 好消息是 TPL 的实现能够运行在MTA 或 STA 线程,并考虑
..
我使用的是完全异步的 API 客户端,也就是说,每个操作要么返回 Task 要么返回 Task,例如: static async Task DoSomething(int siteId, int postId, IBlogClient client){等待 client.DeletePost(siteId, postId);//调用API客户端Console.WriteLine("已删除帖子 {
..
我需要在控制台应用程序中运行多个异步任务,并在进一步处理之前等待它们全部完成. 那里有很多文章,但我似乎越读越困惑.我已经阅读并理解了 Task 库的基本原理,但我显然在某处遗漏了一个链接. 我知道可以链接任务,以便它们在另一个完成后开始(这几乎是我读过的所有文章的场景),但我希望我的所有任务同时运行,而且我想要全部完成后才能知道. 对于这样的场景,最简单的实现是什么? 解
..
使用 Microsoft 的异步 CTP 用于 .NET,是否可以在调用方法中捕获异步方法抛出的异常? public async void Foo(){var x = await DoSomethingAsync();/* 处理结果,但有时可能会抛出异常.例如,DoSomethingAsync 从网络获取数据并且数据无效......可能会抛出ProtocolException.*/}公共无效 D
..
我想并行处理一个集合,但我在实现它时遇到了麻烦,因此我希望得到一些帮助. 如果我想在并行循环的 lambda 内调用 C# 中标记为 async 的方法,就会出现问题.例如: var bag = new ConcurrentBag();Parallel.ForEach(myCollection, async item =>{//一些预先的东西var response = await Get
..
Async CTP 中的 Task.WaitAll() 和 Task.WhenAll() 有什么区别?您能否提供一些示例代码来说明不同的用例? 解决方案 Task.WaitAll 阻塞当前线程,直到一切都完成. Task.WhenAll 返回一个 task 表示等待一切完成的动作. 这意味着从异步方法中,您可以使用: await Task.WhenAll(tasks); .
..
在 Metro 应用程序中,我需要执行多个 WCF 调用.需要进行大量调用,因此我需要在并行循环中执行它们.问题是并行循环在 WCF 调用全部完成之前就退出了. 您将如何重构它以使其按预期工作? var ids = new List() { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };var customer = new Syst
..
//假设有一个包含 1000 多个 URL 的列表string[] urls = { "http://google.com", "http://yahoo.com", ... };//现在让我们并行地向每个 URL 发送 HTTP 请求urls.AsParallel().ForAll(async (url) => {var client = new HttpClient();var html =
..
我遇到了一些使用 c# 的 async/await 关键字进行异步编程的最佳实践(我是 c# 5.0 的新手). 给出的建议之一如下: 稳定性:了解您的同步上下文 ...一些同步上下文是不可重入的和单线程的.这意味着在给定时间只能在上下文中执行一个工作单元.这方面的一个示例是 Windows UI 线程或 ASP.NET 请求上下文.在这些单线程同步上下文中,很容易让自己陷入死锁
..
我不太明白 Task.Wait 和 await 之间的区别. 我在 ASP.NET WebAPI 服务中有类似于以下功能的东西: 公共类 TestController : ApiController{公共静态异步任务富(){等待 Task.Delay(1).ConfigureAwait(false);返回 "";}公共异步静态任务酒吧(){返回等待 Foo();}公共异步静态任务罗斯(){
..
当你有服务器端代码(即一些 ApiController)并且你的函数是异步的 - 所以它们返回 Task - 是否被认为是最佳实践等待调用 ConfigureAwait(false) 的函数的时间? 我读到它的性能更高,因为它不必将线程上下文切换回原始线程上下文.但是,对于 ASP.NET Web Api,如果您的请求来自一个线程,并且您等待某个函数并调用 ConfigureAwait(fa
..
有什么区别: public ActionResult Login(LoginViewModel 模型,字符串 returnUrl){如果(模型状态.IsValid){IdentityResult 结果 = IdentityManager.Authentication.CheckPasswordAndSignIn(AuthenticationManager, model.UserName, mod
..
我正在尝试为 Windows 8 项目提供异步服务,并且该服务有一些异步调用,一次只能调用一次. 公共异步任务 CallThisOnlyOnce(){传播某些事件();等待 SomeOtherMethod();传播不同的事件();} 由于不能在 lock 语句中封装异步调用,我想到了使用 AsyncLock 模式,但比我想的还不如尝试这样的方法: 私人任务 _callThisOnlyOn
..