task-parallel-library相关内容
我刚刚遇到以下行为: for (var i = 0; i {Debug.Print("错误:" + i.ToString());});} 会导致一系列“错误:x",其中大部分 x 等于 50. 同样: var a = "Before";var task = new Task(() => Debug.Print("使用值:" + a));a = "之后";task.Start();
..
这个问题是由对这个的评论引发的: 如何在没有 Microsoft.Bcl.Async 的情况下将非线性 async/await 代码向后移植到 .NET 4.0? 在链接的问题中,我们有一个 WebRequest 操作,如果它一直失败,我们希望重试有限的次数.Async/await 代码可能如下所示: async TaskGetResponseWithRetryAsync(strin
..
是否有推荐的自取消和重新启动任务的既定模式? 例如,我正在开发后台拼写检查器的 API.拼写检查会话被包装为 Task.每个新会话都应取消前一个会话并等待其终止(以正确重用拼写检查服务提供者等资源). 我想出了这样的东西: 类拼写检查器{任务挂起任务 = null;//待处理的会话CancellationTokenSource cts = null;//挂起会话的 CTS//Spel
..
取消以下的正确方法是什么? var tcpListener = new TcpListener(connection);tcpListener.Start();var 客户端 = 等待 tcpListener.AcceptTcpClientAsync(); 简单地调用 tcpListener.Stop() 似乎会导致 ObjectDisposedException 并且 AcceptTcpCl
..
UPDATE 这个问题的目的是得到一个关于 Task.Run() 和死锁的简单答案.我非常理解不混合异步和同步的理论推理,我把它们放在心上.我不喜欢从别人那里学习新东西;只要有可能,我就会尝试这样做.有时一个人需要的只是一个技术答案...... 我有一个需要调用异步方法的 Dispose() 方法.由于我 95% 的代码是异步的,重构不是最佳选择.拥有框架支持的 IAsyncDisposab
..
转换/包装“经典"异步方法的最佳方法是什么?该方法使用回调函数返回(可等待的)任务? 例如,给定以下方法: public void GetStringFromUrl(string url, Action onCompleted); 我所知道的将其包装到返回任务的方法中的唯一方法是: public TaskGetStringFromUrl(字符串网址){var t = new TaskC
..
假设我有一个类需要使用 InitializeAsync() 方法执行一些异步初始化.我想确保初始化只执行一次.如果另一个线程在初始化过程中调用此方法,它将“等待"直到第一个调用返回. 我正在考虑以下实现(使用 SemaphoreSlim).有没有更好/更简单的方法? 公共类 MyService : IMyService{private readonly SemaphoreSlim mSem
..
在新的异步 dotnet 4.5 库中有没有办法在 Task.WhenAll 方法?我想获取多个源,并在 5 秒后停止,并跳过未完成的源. 解决方案 您可以使用 Task 将生成的 Task 与 Task.Delay() 结合起来.WhenAny(): await Task.WhenAny(Task.WhenAll(tasks), Task.Delay(timeout)); 如果你想在
..
在查看各种 C# 异步 CTP 示例时,我看到一些异步函数返回 void,而其他一些返回非通用 Task.我可以理解为什么在异步操作完成时返回 Task 对将数据返回给调用者很有用,但是我看到的函数具有 Task 从不返回任何数据.为什么不返回void? 解决方案 SLaks 和 Killercam 的回答很好;我想我应该添加更多上下文. 您的第一个问题本质上是关于哪些方法可以标记为
..
我有以下场景,我认为这可能很常见: 有一个任务(一个 UI 命令处理程序)可以同步或异步完成. 命令到达的速度可能比处理的更快. 如果一个命令已经有一个待处理的任务,新的命令处理程序任务应该被排队并顺序处理. 每个新任务的结果可能取决于前一个任务的结果. 应该遵守取消,但为了简单起见,我想将其排除在本问题的范围之外.此外,线程安全(并发)不是必需的,但必须支持重入.
..
我知道这些年来异步编程发生了很多变化.我有点尴尬,因为我让自己在 34 岁就生疏了,但我指望 StackOverflow 使我跟上进度. 我想做的是在一个单独的线程上管理一个“工作"队列,但以一次只处理一个项目的方式.我想在这个线程上发布工作,它不需要将任何东西传回给调用者.当然,我可以简单地启动一个新的 Thread 对象并让它在共享的 Queue 对象上循环,使用睡眠、中断、等待句柄等.
..
我看到以下有关何时何地使用 ConfigureAwait(false) 的文章,但无法得到答案. 你不需要ConfigureAwait(false),但仍然在库中使用它,和用户界面应用程序.(例如 Xamarin、WinForms 等) https://blog.stephencleary.com/2017/03/aspnetcore-synchronization-context.h
..
在下面的示例中,使用了两个 await 调用.为了提高性能,示例被转换为 Task.WaitAll()(实际上并没有更快,但这只是一个例子). 这是在 Android 上使用 Sqlite.Net 的库中的代码,该方法从主 UI 线程上的 OnResume() 调用: public async Task SetupDatabaseAsync(){等待 CreateTableAsync();
..
我在并行调用 WCF 服务时遇到问题.我正在尝试使用 Tasks 并行调用两个服务以节省一些时间(我不是要使此异步),但是我的任务正在以另一个用户的身份运行.这两个服务都需要 Windows 身份验证,并且两个调用都失败,因为调用该服务的用户没有所需的权限. 调用代码(下面的代码)位于运行 IIS 7.5 的 ASP.NET MVC4 中的控制器操作中.所有涉及的应用程序池都设置为允许 AS
..
我有以下 WCF 合同: [ServiceContract(Namespace = "http://abc/Services/AdminService")]公共接口 IAdminService{【经营合同】字符串 GetServiceVersion();//这里有更多方法} GetServiceVersion 是一个返回一些字符串的简单方法.用作ping来检查服务是否可达. 现在我想异步
..
更多新手问题: 这段代码从主窗口的列表中抓取了一些代理(我不知道如何使变量在不同的函数之间可用)并对每个代理进行检查(简单的 httpwebrequest) 然后将它们添加到名为 finishedProxies 的列表中. 由于某种原因,当我按下开始按钮时,整个程序都挂了.我的印象是 Parallel 为每个操作创建单独的线程,而单独留下 UI 线程,以便它具有响应性? privat
..
我正在编写一个使用 Socket 的应用程序,它将非常密集,然后我真的需要使用我们大型服务器中的每个核心.我看到了这个问题( how to using ThreadPool to run socket thread parallel? ) 在 stackoverflow 中只有一个答案指向此 MSDN 示例. 但我认为它只指出如何使它并发而不是并行,这里有人问cpu 密集型打开套接字的程度
..
我有一个接口声明 Task DoSomethingAsync(); 我使用 MoqFramework 进行测试: [TestMethod()]公共异步任务 MyAsyncTest(){模拟mock = new Mock();mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { });...} 然后在我的测试中,我执行调用 a
..
我有一个 Web API 的操作,我需要在其中运行一些任务并忘记此任务.我的方法现在是这样组织的: public async TaskDoSth(){等待 Task.Run(...);.....//做一些其他的工作} 问题是很明显它在完成后停在等待线等待,然后才继续工作.我需要“开火然后忘记"我应该只调用 Task.Run() 而没有任何 async-await 吗? 解决方案 而
..
我在一个带有一个按钮和一个标签的 WinForms 应用程序中有以下代码: 使用系统;使用 System.IO;使用 System.Threading.Tasks;使用 System.Windows.Forms;命名空间 WindowsFormsApplication1{公共部分类 Form1 :表单{公共 Form1(){初始化组件();}private async void button1_
..