草庐IT

TASK_COMPATIBILITY_V

全部标签

c# - Task.Wait 在 OperationCanceledException 情况下的意外行为

考虑以下代码:CancellationTokenSourcects0=newCancellationTokenSource(),cts1=newCancellationTokenSource();try{vartask=Task.Run(()=>{thrownewOperationCanceledException("123",cts0.Token);},cts1.Token);task.Wait();}catch(AggregateExceptionae){Console.WriteLine(ae.InnerException);}由于MSDN任务应处于Faulted状态,因为它的t

c# - 等待新任务 <T>( ... ) : Task does not run?

问题的延续here:在上述问题中,我有以下函数返回一个任务类型的对象(用于增量测试目的):privatestaticTaskGetInstance(){returnnewTask((Func>)(async()=>{awaitSimpleMessage.ShowAsync("TEST");returnnewobject();}));}当我调用awaitGetInstance();时,该函数被调用(并且我假设任务已返回,因为没有抛出异常)但任务就在那里。我只能猜测我做错了。我不希望此函数返回一个已经在运行的任务(即IMPERATIVE).如何异步运行此函数返回的任务?

c# - 如何在 .net 3.5 中获得 Task<T> 的等价物?

我有一些代码正在使用Task它会在短时间内延迟从串行读取操作返回结果,如下所示:voidReturnResponseAfterAShortDelay(){if(delayedResponseCancellationTokenSource!=null)delayedResponseCancellationTokenSource.Cancel();//Cancelanypendingoperationsandstartanewone.delayedResponseCancellationTokenSource=newCancellationTokenSource();log.InfoFor

c# - 链接两个函数 () -> Task<A> 和 A->Task<B>

不知道是不是我对TPL的理解有误,但是我很难理解如何获得以下内容:我有两个功能TaskgetA(){...}TaskgetB(Aa){...}这似乎经常发生:我可以异步地得到一个A。给定一个A,我可以异步地得到一个B。我想不出在TPL中将这些函数链接在一起的正确方法。这是一个尝试:TaskCombined(){Taskta=getA();Task>ttb=ta.ContinueWith(a=>getB(a.Result));returnttb.ContinueWith(x=>x.Result.Result);}ContinueWith是我感到困惑的地方。返回的类型是“双重任务”,Tas

c# - 了解一行中使用的 Task.Run + Wait() + async + await 的使用

我是C#新手,所以我在理解一些概念时遇到了困难,并且遇到了一段我不太理解的代码:staticvoidMain(string[]args){Task.Run(async()=>{awaitSomeClass.Initiate(newConfiguration());}).Wait();while(true);}据我了解,这会运行一个启动方法的任务。此方法运行,然后,一旦完成,就会进入无限循环等待。感觉要么是代码没看懂,要么是我没理解对。谢谢 最佳答案 你可以把它分成几个部分:async()=>{awaitSomeClass.Initi

c# - Task.Factory.StartNew 或 Parallel.ForEach 用于许多长时间运行的任务?

这个问题在这里已经有了答案:9年前关闭。PossibleDuplicate:Parallel.ForEachvsTask.Factory.StartNew我需要在ThreadPool中运行大约1,000个任务每晚一次(这个数字将来可能会增加)。每个任务都在执行长时间运行的操作(从Web服务读取数据)并且是非CPU密集型.AsyncI/O不是此特定用例的选项。给定一个IList参数,我需要DoSomething(stringx).我试图在以下两个选项之间进行选择:IListtasks=newList();foreach(varpinparameters){tasks.Add(Task.F

c# - 何时处理带有子任务的 System.Threading.Task?

我有一个启动多个子任务的任务。(例如,任务A创建B、C、D、E、F)。我还创建了一个System.Threading.Timer以每10秒轮询一次数据库,以检查计划的项目是否已按请求取消。如果是,它会设置CancellationTokenSource以便任务知道要取消。每个子任务,在本例中为B、C、D、E、F,将在适当的时候取消(它们循环遍历文件并四处移动)。由于Task实现了IDisposable,我想知道从再次调用Task.WaitAll是否是个好主意catchblock,等待取消传播。虽然将处理取消请求,但子任务可能处于循环中间并且在完成之前无法取消但是,根据MSDN:Alway

c# - Task.Delay 与 DispatcherTimer?

我正在考虑将Task.Delay()用于不间断计时器,因为它更简单且可读性更强。由于我是.NET的新手,我看不出这两种代码之间有什么显着差异。你能告诉我它们之间的区别(如果有的话)吗?//CreatevariableatsomeplaceDispatcherTimertimer=newDispatcherTimer();timer.Interval=TimeSpan.FromSeconds(5);timer.Tick+=timer_Elapsed;timer.Start();//Functionotherplacevoidtimer_Elapsed(objectsender,Event

c# - 如何使用Task Parallel Library(TPL)实现重试逻辑

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Retryataskmultipletimesbasedonuserinputincaseofanexceptionintask我正在寻找一种在TPL中实现重试逻辑的方法。我想要一个通用的函数/类,它能够返回一个任务,该任务将执行给定的操作,并且在出现异常的情况下将重试该任务,直到给定的重试次数为止。我尝试使用ContinueWith并在出现异常时让回调创建一个新任务,但它似乎只适用于固定数量的重试。有什么建议吗?privatestaticvoidMain(){TasktaskWithRetry=Create

c# - 在异步操作后立即调用 Task.Wait() 是否等同于同步运行相同的操作?

换句话说,就是vartask=SomeLongRunningOperationAsync();task.Wait();功能相同SomeLongRunningOperation();换句话说,就是vartask=SomeOtherLongRunningOperationAsync();varresult=task.Result;功能相同varresult=SomeOtherLongRunningOperation();根据Task.WaitandInlining,如果正在等待Wait的任务已经开始执行,则Wait必须阻塞。然而,如果它还没有开始执行,Wait可能能够将目标任务从它排队的调