task-parallel-library相关内容

一种自取消和重启任务的模式

是否有推荐的自取消和重新启动任务的既定模式? 例如,我正在开发后台拼写检查器的 API.拼写检查会话被包装为 Task.每个新会话都应取消前一个会话并等待其终止(以正确重用拼写检查服务提供者等资源). 我想出了这样的东西: 类拼写检查器{任务挂起任务 = null;//待处理的会话CancellationTokenSource cts = null;//挂起会话的 CTS//Spel ..
发布时间:2021-12-14 20:26:29 C#/.NET

在同步方法中使用 Task.Run() 以避免死锁等待异步方法?

UPDATE 这个问题的目的是得到一个关于 Task.Run() 和死锁的简单答案.我非常理解不混合异步和同步的理论推理,我把它们放在心上.我不喜欢从别人那里学习新东西;只要有可能,我就会尝试这样做.有时一个人需要的只是一个技术答案...... 我有一个需要调用异步方法的 Dispose() 方法.由于我 95% 的代码是异步的,重构不是最佳选择.拥有框架支持的 IAsyncDisposab ..
发布时间:2021-12-14 20:19:08 C#/.NET

将基于回调的异步方法转换为可等待任务的最佳方法

转换/包装“经典"异步方法的最佳方法是什么?该方法使用回调函数返回(可等待的)任务? 例如,给定以下方法: public void GetStringFromUrl(string url, Action onCompleted); 我所知道的将其包装到返回任务的方法中的唯一方法是: public TaskGetStringFromUrl(字符串网址){var t = new TaskC ..
发布时间:2021-12-14 20:18:38 C#/.NET

强制调用一次异步方法

假设我有一个类需要使用 InitializeAsync() 方法执行一些异步初始化.我想确保初始化只执行一次.如果另一个线程在初始化过程中调用此方法,它将“等待"直到第一个调用返回. 我正在考虑以下实现(使用 SemaphoreSlim).有没有更好/更简单的方法? 公共类 MyService : IMyService{private readonly SemaphoreSlim mSem ..
发布时间:2021-12-14 20:07:43 C#/.NET

异步 Task.WhenAll 超时

在新的异步 dotnet 4.5 库中有没有办法在 Task.WhenAll 方法?我想获取多个源,并在 5 秒后停止,并跳过未完成的源. 解决方案 您可以使用 Task 将生成的 Task 与 Task.Delay() 结合起来.WhenAny(): await Task.WhenAny(Task.WhenAll(tasks), Task.Delay(timeout)); 如果你想在 ..
发布时间:2021-12-14 20:07:20 C#/.NET

返回 void 和返回 Task 有什么区别?

在查看各种 C# 异步 CTP 示例时,我看到一些异步函数返回 void,而其他一些返回非通用 Task.我可以理解为什么在异步操作完成时返回 Task 对将数据返回给调用者很有用,但是我看到的函数具有 Task 从不返回任何数据.为什么不返回void? 解决方案 SLaks 和 Killercam 的回答很好;我想我应该添加更多上下文. 您的第一个问题本质上是关于哪些方法可以标记为 ..
发布时间:2021-12-14 20:06:16 C#/.NET

任务排序和重入

我有以下场景,我认为这可能很常见: 有一个任务(一个 UI 命令处理程序)可以同步或异步完成. 命令到达的速度可能比处理的更快. 如果一个命令已经有一个待处理的任务,新的命令处理程序任务应该被排队并顺序处理. 每个新任务的结果可能取决于前一个任务的结果. 应该遵守取消,但为了简单起见,我想将其排除在本问题的范围之外.此外,线程安全(并发)不是必需的,但必须支持重入. ..
发布时间:2021-12-14 20:01:52 C#/.NET

.NET 中在单独(单个)线程上管理任务队列的最佳方式

我知道这些年来异步编程发生了很多变化.我有点尴尬,因为我让自己在 34 岁就生疏了,但我指望 StackOverflow 使我跟上进度. 我想做的是在一个单独的线程上管理一个“工作"队列,但以一次只处理一个项目的方式.我想在这个线程上发布工作,它不需要将任何东西传回给调用者.当然,我可以简单地启动一个新的 Thread 对象并让它在共享的 Queue 对象上循环,使用睡眠、中断、等待句柄等. ..
发布时间:2021-12-14 20:01:31 C#/.NET

使用 Xamarin Android ver 8, .net Standard 运行或不运行包含服务和活动的 ConfigureAwait(false)

我看到以下有关何时何地使用 ConfigureAwait(false) 的文章,但无法得到答案. 你不需要ConfigureAwait(false),但仍然在库中使用它,和用户界面应用程序.(例如 Xamarin、WinForms 等) https://blog.stephencleary.com/2017/03/aspnetcore-synchronization-context.h ..
发布时间:2021-12-14 17:03:54 C#/.NET

调用 Task.WaitAll() 时如何设置任务的用户身份?

我在并行调用 WCF 服务时遇到问题.我正在尝试使用 Tasks 并行调用两个服务以节省一些时间(我不是要使此异步),但是我的任务正在以另一个用户的身份运行.这两个服务都需要 Windows 身份验证,并且两个调用都失败,因为调用该服务的用户没有所需的权限. 调用代码(下面的代码)位于运行 IIS 7.5 的 ASP.NET MVC4 中的控制器操作中.所有涉及的应用程序池都设置为允许 AS ..
发布时间:2021-12-13 20:15:43 C#/.NET

调用基于异步任务的 WCF 方法是否利用 I/O 完成端口或线程池线程来调用延续?

我有以下 WCF 合同: [ServiceContract(Namespace = "http://abc/Services/AdminService")]公共接口 IAdminService{【经营合同】字符串 GetServiceVersion();//这里有更多方法} GetServiceVersion 是一个返回一些字符串的简单方法.用作ping来检查服务是否可达. 现在我想异步 ..
发布时间:2021-12-13 20:15:34 C#/.NET

为什么这个 Parallel.ForEach 代码会冻结程序?

更多新手问题: 这段代码从主窗口的列表中抓取了一些代理(我不知道如何使变量在不同的函数之间可用)并对每个代理进行检查(简单的 httpwebrequest) 然后将它们添加到名为 finishedProxies 的列表中. 由于某种原因,当我按下开始按钮时,整个程序都挂了.我的印象是 Parallel 为每个操作创建单独的线程,而单独留下 UI 线程,以便它具有响应性? privat ..

使用 TPL 在非常密集的应用程序中将异步套接字变为并行,而不仅仅是并发

我正在编写一个使用 Socket 的应用程序,它将非常密集,然后我真的需要使用我们大型服务器中的每个核心.我看到了这个问题( how to using ThreadPool to run socket thread parallel? ) 在 stackoverflow 中只有一个答案指向此 MSDN 示例. 但我认为它只指出如何使它并发而不是并行,这里有人问cpu 密集型打开套接字的程度 ..
发布时间:2021-12-11 11:49:03 C#/.NET

如何告诉 Moq 返回任务?

我有一个接口声明 Task DoSomethingAsync(); 我使用 MoqFramework 进行测试: [TestMethod()]公共异步任务 MyAsyncTest(){模拟mock = new Mock();mock.Setup(arg => arg.DoSomethingAsync()).Callback(() => { });...} 然后在我的测试中,我执行调用 a ..
发布时间:2021-12-09 18:47:53 C#/.NET

Web Api - 即发即忘

我有一个 Web API 的操作,我需要在其中运行一些任务并忘记此任务.我的方法现在是这样组织的: public async TaskDoSth(){等待 Task.Run(...);.....//做一些其他的工作} 问题是很明显它在完成后停在等待线等待,然后才继续工作.我需要“开火然后忘记"我应该只调用 Task.Run() 而没有任何 async-await 吗? 解决方案 而 ..
发布时间:2021-12-08 22:51:48 C#/.NET