Tag: 任务

任务未处理的exception

我试图了解在任务对象中抛出但从未处理过的exception发生了什么。 在MSDn上,据说: 如果您不等待传播exception的任务或访问其Exception属性,则在对任务进行垃圾回收时,将根据.NETexception策略升级exception。 所以我不太明白这些exception会以何种方式影响程序流程。 我认为这些exception应该在垃圾收集后立即中断执行。 但我无法设计这种行为。 在以下代码段中,抛出的exception不会显示。 \\Do something … Task.Run (()=> {throw new Exception(“Exception in the task!”);}); \\Do something else 请问,任何人都可以解释如何处理未处理的任务exception,以及它们如何影响程序流程。

程序运行了多少次? C#

如何在不保留文件和计数的情况下获得程序之前在C#中运行的次数。 如果不可能,可以从计划任务管理器获取? 致C. Ross:如何在注册表设置中完成? 原谅我。 。 。 什么是注册表设置?

任务和垃圾收集有什么问题?

在使用从任务并行库派生的API和类时,开发人员何时需要关注垃圾收集的影响? .NET Task实例在运行期间是否超出范围? ,似乎给人一种安全感,你不必担心将任务保持在范围内。 然而,问题似乎仅限于在ThreadPool上运行的任务,然后它们由ThreadPool rooted 。 但是,如果我正确理解这篇MSDN博客文章 ,那么SO问题的建议通常不适用,因为TaskCompletionSource中的任务不是类似的rooted 。 是否只关注TaskCompletionSource的直接使用时间? 但是,在使用API​​时,您不知道任务的来源。 如果提供的Task来自TaskCompletionSource或其他一些非根源,您是否需要担心存储对continuation的引用? 由于需要考虑任务是否已植根(Async I / O Tasks是否为root?),这似乎很快变得不方便和复杂。 我很难找到关于主题的信息,但它是一个很受欢迎的库,我觉得我不应该阅读反编译的源代码来确定我是否需要担心垃圾收集器的竞争条件,所以我想我必须是遗失或误解的东西。

我应该如何从任务UI线程更新?

我有一项任务,执行一些繁重的工作。 我需要将它的结果LogContent到LogContent Task<Tuple<SupportedComunicationFormats, List<Tuple>>>.Factory .StartNew(() => DoWork(dlg.FileName)) .ContinueWith(obj => LogContent = obj.Result); 这是属性: public Tuple<SupportedComunicationFormats, List<Tuple>> LogContent { get { return _logContent; } private set { _logContent = value; if (_logContent != null) { string entry = string.Format(“Recognized {0} log file”,_logContent.Item1); _traceEntryQueue.AddEntry(Origin.Internal, entry); } } } 问题是_traceEntryQueue是绑定到UI的数据,因为我会在这样的代码上有exception。 所以,我的问题是如何让它正常工作?

C#任务工厂超时

我必须在一个线程中执行一个长进程操作,并继续将结果返回给一个函数。 这是我的代码: Task.Factory.StartNew(() => { try { // long operation which return new ProductEventArgs with a list of product } catch (Exception e) { return new ProductEventArgs() { E = e }; } }).ContinueWith((x) => handleResult(x.Result), TaskScheduler.FromCurrentSynchronizationContext()); 问题实际上我没有超时。 我想放一个计时器,以便返回这样的东西: new ProductEventArgs() { E = new Exception(“timeout”) }; 如果达到超时。 不能使用await / async。 非常感谢 !

继续运行特定数量的任务

我一直试图这样做: 创建’N’任务以执行并持续运行此数量的一段时间,在这种情况下,一个任务完成,然后我应该开始一个新任务以保持相同数量的任务。 我不知道是否可以使用TaskScheduler处理这个问题,或者我必须创建一个自定义的TaskScheduler。 我认为可行的另一个选择是,当任务完成时使用TPL DataFlow Producer-Consumer,然后taskscheduler接受生产者生成的新任务。 问题是:当一个任务完成以保持相同数量的任务时,我如何创建一个新任务?

Kinect框架到达异步

我正在寻找Kinect v2 SDK中的MultiSourceFrameArrived事件的一些帮助。 以下是有问题的方法: private async void _reader_MultiSourceFrameArrived(object sender, MultiSourceFrameArrivedEventArgs e) { MultiSourceFrame multiSourceFrame = e.FrameReference.AcquireFrame(); using (var colorFrame = multiSourceFrame.ColorFrameReference.AcquireFrame()) { if (colorFrame != null) { _writeableBitmap.Lock(); colorFrame.CopyConvertedFrameDataToIntPtr( _writeableBitmap.BackBuffer, (uint)(_colorFrameDescription.Width * _colorFrameDescription.Height * _colorFrameDescription.BytesPerPixel), ColorImageFormat.Bgra); _writeableBitmap.AddDirtyRect(new Int32Rect(0, 0, _writeableBitmap.PixelWidth, _writeableBitmap.PixelHeight)); _writeableBitmap.Unlock(); reflectionOverlayControl.ReflectionImageSource = _writeableBitmap; } } using (var bodyFrame = multiSourceFrame.BodyFrameReference.AcquireFrame()) { if (bodyFrame […]

WaitAll和WhenAll有什么区别?

我有这个代码: List misClasificaciones = new List(); Task tskClasificaciones = Task.Run(() => { misClasificaciones = VariablesGlobales.Repositorio.buscarComponentesClasificacionesTodosAsync().Result; }); Task.WhenAll(tskClasificaciones); List misVClasificacionesParaEstructuras = new List(misClasificaciones); 如果我使用Task.WhenAll , misClasificaciones没有任何元素,但是当我使用awit时,我得到了我向数据库请求的所有元素。 何时使用WhenAll以及何时使用WaitAll ?

如何强制取消任务?

假设,有一项任务包含以下约: Task someTask = new Task(() => { while(!IsCancellationRequested) { Do_something_over_a_long_period_of_time(); token.ThrowIfCancellationRequested(); Do_something_over_a_long_period_of_time(); token.ThrowIfCancellationRequested(); Do_something_over_a_long_period_of_time(); token.ThrowIfCancellationRequested(); } }); someTask.Start(); 并且有非常不耐烦的用户。 他们渴望立即终止我的申请。 他们不想等待长时间的行动。 我曾经使用Thread类,并能够通过调用Abort()命令立即中止我的所有线程。 我如何立即中止我的任务? 谢谢。

等到所有任务完成unit testing

我有这门课,我想进行unit testing: public class SomeClass { public void Foo() { Bar(); } private void Bar() { Task.Factory.StartNew(() => { // Do something that takes some time (eg an HTTP request) }); } } 这就是我的unit testing的样子: [TestMethod] public void TestFoo() { // Arrange var obj = new SomeClass(); // Act obj.Foo(); obj.Foo(); obj.Foo(); // Assert /* […]