Tag: task

按时间取消任务

我有一个multithreading应用程序,我需要在一定时间后取消每个任务,即使在取消时,他们使用非托管资源。 现在我使用以下代码(例如,控制台应用程序)。 在实际应用中,延迟可能发生在非托管资源中。 static void Main() { for (int i = 0; i < 10; i++) { Task.Factory.StartNew(Do, TaskCreationOptions.LongRunning); } Console.ReadLine(); } private static void Do() { new Timer(Thread.CurrentThread.Abort, null, 1000, -1); try { Console.WriteLine("Start " + Task.CurrentId); Thread.Sleep(2000); Console.WriteLine("End " + Task.CurrentId); } catch (Exception) { Console.WriteLine("Thread Aborted " + Task.CurrentId); } } 得到结果: […]

Task.WaitAll()无法按预期工作

我正在试图弄清楚如何使用Task类。 在过去我总是使用常规的Thread类,但我正在尝试掌握所有的异步编程…… 作为一个例子,我创建了一个包含所有代码的主Winforms应用程序。 我的问题的相关代码是: //Relevant delegates public delegate void MethodAction(int num); public delegate void MethodConversion(); public delegate void OnCompletionAction(string completiontext); //Button user presses private void button4_Click(object sender, EventArgs e) { richTextBox1.Clear(); sw.Reset(); sw.Start(); Sync.RunAsync3(calcSim); } //The method that simulates a calculation by adding a sleep //the input param threadlength is just to allow threads to […]

Thread.Sleep(2500)与Task.Delay(2500).Wait()

我想要澄清一下。 我知道Task.Delay将在内部使用Timer,它显然是基于任务的(等待),而Thread.Sleep将导致线程被阻止。 但是,在任务上调用.Wait会导致线程被阻塞吗? 如果没有,可以假设Task.Delay(2500).Wait()优于Thread.Sleep(2500) 。 这与我正在调用的SO问题/答案略有不同.Wait() 。

CancellationTokenSource vs. volatile boolean

在一个易失性布尔字段上使用CancellationTokenSource来表示Task完成是否有任何好处?

与CancellationTokenSource的Task.Factory.FromAsync

我有以下代码行用于从NetworkStream异步读取: int bytesRead = await Task.Factory.FromAsync(this.stream.BeginRead, this.stream.EndRead, buffer, 0, buffer.Length, null); 我想支持取消。 我看到我可以使用CancellationTokenSource取消任务 ,但是我没有看到任何方法可以将它传递给TaskFactory.FromAsync() 。 是否可以使FromAsync()构造的任务支持取消? 编辑:我想取消已经运行的任务。

UWP从Task更新UI

我有应用程序,它检查本地网络中的网络范围(用于运行http服务)。 所以这意味着,我正在检查从10.0.0.1到10.0.0.255的fe。 这就是问题,当在PC上运行时,速度已经足够了,但是当在Lumia 950上运行时,速度还不够。 所以我想在扫描期间更新UI。 以下是问题: 此时我有几个任务10 – 每个任务都在扫描他的范围fe任务1 – 10.0.0.1到10.0.0.25等。 – 我应该使用10个任务还是有某种方式,.net将如何解决它本身? 如果我将使用50个任务,那将是什么表现呢? 第二个问题是,在扫描过程中,我会找到PC,Web服务正在工作,但是……当找到PC时,我应该如何更新UI? 此时我只能在完成所有任务后才能这样做。 我调用的方法是异步任务

aync与异步方法中的Task.Result

执行以下操作之间的区别是什么: async Task method(){ var r = await dynamodb.GetItemAsync(…) return r.Item; } VS async Task method(){ var task = dynamodb.GetItemAsync(…) return task.Result.Item; } 在我的情况下由于某种原因只有第二个工作。 第一个似乎永远不会结束。

如何在.net 3.5中获得等效的Task ?

我有一些使用Task代码,它推迟了短时间内从串行读操作返回结果,如下所示: void ReturnResponseAfterAShortDelay() { if (delayedResponseCancellationTokenSource != null) delayedResponseCancellationTokenSource.Cancel(); // Cancel any pending operations and start a new one. delayedResponseCancellationTokenSource = new CancellationTokenSource(); log.InfoFormat(“Deferring response for {0} ms”, Settings.Default.TimeoutMs); Task.Delay(Properties.Settings.Default.TimeoutMs, delayedResponseCancellationTokenSource.Token) .ContinueWith((continuation) => ReturnWhateverHasArrived(), TaskContinuationOptions.NotOnCanceled) .Start(); } 此代码背后的想法是在没有新字符到达指定间隔时返回结果。 但是,由于我无法控制的因素,我必须使用.NET 3.5,这会阻止我使用Task ,因此我必须以某种方式重构此代码。 如何在不使用Task情况下实现相同的结果? 澄清 虽然我展示的具体代码恰好是一个定时延迟,但我的用法并不仅限于延迟。 可能还有其他情况我想立即启动一些“长时间运行”的轮询任务。 典型情况是I / O绑定操作,例如,定期查询连接到串行端口的设备,然后在满足某些条件时引发事件。

异步并行下载文件

编辑 我已经改变了问题的标题,以反映我的问题,但也回答了如何轻松实现这一目标。 我试图让第二种方法返回Task而不是第一种方法中的Task ,但是由于尝试修复它,我得到了一连串的错误。 我在await body(partition.Current);之前添加了return await body(partition.Current); 反过来它要求我在下面添加一个return语句,所以我在下面添加了return null 但是现在select语句抱怨它无法从查询中推断出类型参数 我将Task.Run更改为Task.Run但没有成功。 我该如何解决? 第一种方法来自http://blogs.msdn.com/b/pfxteam/archive/2012/03/05/10278165.aspx ,第二种方法是我正在尝试创建的重载。 public static class Extensions { public static Task ForEachAsync(this IEnumerable source, int dop, Func body) { return Task.WhenAll( from partition in Partitioner.Create(source).GetPartitions(dop) select Task.Run(async delegate { using (partition) while (partition.MoveNext()) await body(partition.Current); })); } public static Task ForEachAsync(this IEnumerable source, […]

如果引发任何exception,如何在Task.WhenAll上取消并引发exception?

我正在使用Task.WhenAll等待倍数任务。 当其中一个生成exception时,我希望Task.WhenAll(或任何其他等待多个任务的方式)立即取消其他任务并引发exception。 可能吗? 提前致谢