标签:task
-
当列表可以附加其他任务时用于等待Task.WhenAny(List <T>)的适当模式 - c#
等待更改中的List<Task>是不可能的,因为Task.WhenAny(List<Task>)获取List<Task>的副本。 什么是合适的模式 List<Task> taskList = new List<Task>(); await Task.WhenAny(taskList); 在第一个Wh […]
-
GUI task.wait与控制台或ThreadPool的死锁 - c#
我目前正在深入阅读C#(第3版),给出的警告之一是将GUI线程与task.wait一起使用是危险的,因为它可能导致死锁。但这不是ThreadPool或控制台的问题。我的问题是,为什么运行task.wait的线程不会死锁,所以对于以下代码(摘自本书),即使是控制台应用程序(背景)线程也不会像死锁那样陷入困境。 public static void Main(s […]
-
简便的方法来等待已取消的任务? - c#
我发现自己经常这样编写代码: try { cancellationTokenSource.Cancel(); await task.ConfigureAwait(false); // this is the task that was cancelled } catch(OperationCanceledException) { // Cancellatio […]
-
任务计划程序:在Task.Factory.StartNew中等待时,线程是否返回到池中? - c#
我正在实现一个并发上限的辅助引擎。我正在使用信号灯,直到并发降至最大数量以下,然后使用Task.Factory.StartNew将异步处理程序包装在try / catch中,并使用finally释放信号灯。 我意识到这会在线程池上创建线程-但是我的问题是,当那些任务运行线程中的一个实际上正在等待时(在真正的IO调用或等待句柄上)时,线程是否返回池中,正如我希 […]
-
C#任务WhenAll on方法根据等待的调用返回结果 - c#
我正在尝试使此代码以异步方式工作,但我有一些疑问。 public async Task<string> GetAsync(string inputA, string inputB) { var result = await AnotherGetAsync(inputA, inputB) .ConfigureAwait(false); return […]
-
Task.IsCancelled不起作用 - c#
我有以下示例代码: static class Program { static void Main() { var cts = new CancellationTokenSource(); var task = Task.Factory.StartNew( () => { try { Console.WriteLine("Task: Runn […]
-
如何正确并行化工作人员任务? - c#
请考虑以下代码片段,并注意设置numberTasksToSpinOff等于1,然后等于3,4或更大(取决于计算机上的线程资源)之间的总运行时间差异。当完成更多任务时,我注意到运行时间更长。 我特意将数据收集传递到每个工作人员任务同时读取的每个工作人员实例中。我认为只要这些操作只是读取或枚举,任务就可以访问共享数据结构而不会阻塞。 我的目标是剥离多个任务,这些 […]
-
等待Task.CompletedTask是否意味着async方法将同步运行? - c#
static async Task WaitTaskCompleted() { //Use Thread A before await Task.CompletedTask await Task.CompletedTask; //Will the code after await Task.CompletedTask always use Thread A, […]
-
在使用Xamarin完成方法之前,UI不会更新 - c#
我从移动开发开始冒险,已经遇到了问题。我知道在WPF中我会使用BackgroundWorker来更新UI,但是如何在使用Xamarin的Android中使用它呢? 我发现了很多建议,但没有一个对我有用。下面的代码不会在其余部分执行时更改文本,它只是等待并立即执行所有操作,这不是我想要的。 private void Btn_Click(object sende […]
-
您为什么要使用continueWith而不是简单地将延续代码附加到后台任务的末尾? - c#
Task.ContinueWith的msdn文档只有一个代码示例,其中一个任务(dTask)在后台运行,然后(使用ContinueWith)执行第二个任务(dTask2)。样品的实质如下所示; Task dTask = Task.Factory.StartNew( () => { ... first task code here ... } ); Ta […]