task-parallel-library
全部标签 我正在尝试编写一个方法来尝试执行一个操作,但会吞下引发的任何异常。我的第一次尝试如下:publicstaticvoidSafeExecute(ActionactionThatMayThrowException){try{actionThatMayThrowException();}catch{//noop}}在使用同步操作调用时有效:SafeExecute(()=>{thrownewException();});但是当使用异步操作调用时失败:SafeExecute(async()=>{awaitTask.FromResult(0);thrownewException();});是否可以
我有一个带有静态get属性的静态类,在这个属性中,我这样做://propertybody{//HttpContext.CurrentisNOTnull...Parallel.ForEach(files,file=>{//HttpContext.Currentisnullvarpromo=newPromotion();...});...//HttpContext.CurrentisNOTnull}在View使用此属性之前,此静态类不会进行类型初始化。问题在于Promotion的静态构造函数,它是在Parallel.ForEach()中第一次创建newPromotion()时初始化的,使用
我想提供一个基于任务的异步模式风格的方法。在等待方法时,我找不到这两种提供方法的区别://GetStatsisadelegateforavoidmethodinthisexamplepublicTaskGetStatsAsync(){returnTask.Run(GetStats);}publicasyncTaskGetStatsAsync(){returnawaitTask.Run(GetStats);}//Usage:awaitGetStatsAsync();//Difference?上面的方法似乎比下面的方法有更少的开销。在查看MSDN博客时,我注意到他们似乎使用了lower方法
因此,task.Wait()可以转化为awaittask。当然,语义是不同的,但这大致就是我将使用Waits的阻塞代码转换为使用awaits的异步代码的方式。我的问题是如何将task.Wait(CancellationToken)转换为相应的await语句? 最佳答案 await用于异步方法/委托(delegate),它们要么接受CancellationToken,因此您应该在调用它时传递一个(即awaitTask.Delay(1000,cancellationToken)),或者它们没有并且不能真正被取消(例如等待I/O结果)。但
我一直在谷歌搜索甚至Bing-ing,但我没有想出任何令人满意的东西。我有一个包含一些命令的ViewModel,例如:SaveCommand、NewCommand和DeleteCommand。我的SaveCommand执行保存到文件操作,我希望它是一个async操作,这样UI就不会等待它。我的SaveCommand是AsyncCommand的一个实例,它实现了ICommand。SaveCommand=newAsyncCommand(asyncparam=>{Connectioncon=awaitConnection.GetInstanceAsync(m_configurationPat
我们正在使用thiscodesnippet从StackOverflow生成一个任务,该任务在任务集合中的第一个任务成功完成后立即完成。由于其执行的非线性特性,async/await并不是真正可行的,因此此代码改用ContinueWith()。不过,它没有指定TaskScheduler,它是numberofsources已经提到可能是危险的,因为它使用TaskScheduler.Current而大多数开发人员通常期望来自延续的TaskScheduler.Default行为。普遍的看法似乎是您应该始终将显式的TaskScheduler传递给ContinueWith。但是,我还没有看到关于何
我有一个嵌套的for循环。我用Parallel.For()替换了第一个For,计算速度提高了。我的问题是关于用Parallel.For()替换第二个for(内部)。会提高速度吗?或者没有区别?还是会变慢?编辑:由于内核不是无限的(通常有2到8个内核),因此内部循环是并行运行的。因此,如果我用Parallel.For()更改内部for,它会再次并行运行。但我不确定它如何改变性能和速度。 最佳答案 来自“太细粒度,太粗粒度”小节,“反模式”部分在"Patternsofparallelprogramming"通过.NETparallelc
我们有一个托管的.Net/C#应用程序,它创建TPL任务以对JPEG图像执行JPEG元数据编码。每个任务都使用TaskCreationOptions.LongRunning选项构建,例如,Tasktask=newTask(()=>TaskProc(),cancelToken,TaskCreationOptions.LongRunning);TaskProc()利用JpegBitmapDecoder和JpegBitmapEncoder类添加JPEG元数据并将新图像保存到磁盘。我们允许最多2个这样的任务在任何时候处于事件状态,并且这个过程应该无限期地继续下去。执行上述操作一段时间后,我们得
我正在尝试创建一个接受TcpClient连接并在客户端连接后执行任务“ConnectedAction”的方法。我在尝试创建新任务以运行委托(delegate)“ConnectedAction”时收到编译错误。Argument1:cannotconvertfrom'void'to'System.Func'我相信这个错误是因为该方法正在尝试运行“ConnectedAction”方法并将void返回给Task.Run参数。如何让任务运行“ConnectedAction”委托(delegate)?classListener{publicIPEndPointListenerEndPoint{ge
我想每秒执行一些代码。我现在使用的代码是:Task.Run((Action)ExecuteSomething);ExecuteSomething()定义如下:privatevoidExecuteSomething(){Task.Delay(1000).ContinueWith(t=>{//Dosomething.ExecuteSomething();});}这个方法会阻塞线程吗?或者我应该在C#中使用Timer类吗?似乎Timeralsodedicatesaseparatethreadforexecution(?) 最佳答案 Tas