草庐IT

延迟任务

全部标签

C# Linq - 延迟执行

如果我建立一个查询说:(查询是使用System.Xml.Linq中的XDocument类构建的)varelements=fromeincalendarDocument.Root.Elements("elementName")selecte;然后我多次调用elements.Last()。每次调用都会返回最新的Last()元素吗?例如,如果我这样做elements.Last().AddAfterSelf(newXElement("elementName","someValue1"));elements.Last().AddAfterSelf(newXElement("elementName

c# - 一个任务可以有多个等待者吗?

我正在研究一个Windows8项目的异步服务,该服务有一些异步调用,一次只能调用一次。publicasyncTaskCallThisOnlyOnce(){PropagateSomeEvents();awaitSomeOtherMethod();PropagateDifferentEvents();}由于您不能将异步调用封装在lock语句中,我想到了使用AsyncLock模式,但我想我不妨尝试这样的事情:privateTask_callThisOnlyOnce;publicTaskCallThisOnlyOnce(){if(_callThisOnlyOnce!=null&&_callTh

c# - .NET 任务的性能指标/诊断

有没有办法从.NET中获取有关(C#5或更新版本,所以异步/等待后)等待执行的任务数量和类似指标的数据,以用于诊断生产服务器上发生的问题?我正在讨论的情况是一个异步所有的方式向下系统(例如一个巨大的并行套接字服务器,其中每个请求从一开始就异步运行),其中初始任务要么产生多个任务,每个任务都需要处理(或每次启动更多任务)或生成任务的时间,其中一些阻塞(如第三方代码),其中一些正确异步工作。我见过两种难以有效诊断的情况:在正常负载下,一切正常,但如果有足够多的请求,则CPU会很快跳到100%,所有请求的完成速度会越来越慢。当负载减轻时,CPU将保持在100%,直到大部分待处理任务逐渐完成,

c# - 是否可以确定 IEnumerable<T> 是否已延迟执行挂起?

我有一个接受Enumerable的函数。我需要确保对枚举器进行评估,但如果它已在列表或其他一些“卡住”集合中准备就绪,我宁愿不创建它的副本(例如通过ToList()或ToArray())。我所说的“冰雪奇缘”是指已经建立了项目集的集合,例如List、Array、FsharpSet、Collection等,而不是像Select()和where()这样的linq东西。是否可以创建一个函数“ForceEvaluation”来确定可枚举对象是否已延迟执行挂起,然后评估可枚举对象?publicvoidProcess(IEnumerablefoos){IEnumerableevalutedFoos

c# - 如何以编程方式确定 Windows 任务栏是否隐藏?

我需要知道Windows任务栏是否隐藏。我相信没有.NET方法可以做到这一点,而且我也遇到过很多“如何隐藏和显示任务栏”示例,但我没有看到任何基于我正在寻找的东西。我不熟悉WindowsAPI,所以很难看懂传统的Windows代码。有人可以告诉我一篇文章或类型代码告诉我任务栏的当前状态是否隐藏吗?我正在用C#编写代码。谢谢。 最佳答案 winSharp93提供了一个似乎有效的辅助类(“FindoutSize(andposition)ofthetaskbar”)。它使用Win32的SHAppBarMessagefunction.以下是

c# - 有哪些 C# 工具可用于触发、排队、确定相关任务的优先级

我有一个与数据库交互的C#服务应用程序。它最近从.NET2.0迁移到了.NET4.0,因此我们可以使用大量新工具。我正在寻找指向编程方法或工具/库的指针,以处理定义任务、配置它们所依赖的任务、排队、确定优先级、取消等。有多种类型的服务:数据(用于检索和更新)计算(用数据计算的结果填充一些表)报告这些服务通常相互依赖并按需触发,即报告任务,其中可能包含代码,例如if(IsSomeDependentCalculationRequired())PerformDependentCalculation();//whichmaytriggerfurthercalculationsGenerateR

c# - 为什么运行一百个异步任务比运行一百个线程花费的时间更长?

为什么运行一百个异步任务比运行一百个线程花费的时间更长?我有以下测试类:publicclassAsyncTests{publicvoidTestMethod1(){vartasks=newList();for(vari=0;i();for(vari=0;iLongRunningOperationAsync(){varsw=Stopwatch.StartNew();awaitTask.Delay(500);Debug.WriteLine("Completedat{0},took{1}ms",DateTime.Now,sw.Elapsed.TotalMilliseconds);return

c# - 异步任务和锁

我有一个应该由两个进程更新的元素列表。第一个是UI线程(由用户控制),第二个是从Web服务检索信息的后台进程。由于第二个进程是I/O绑定(bind)的,它似乎适合异步任务。这引出了几个问题:由于异步任务不在单独的线程上运行,看来我在更新此列表时不需要任何类型的锁,对吧?另一方面,我们是否可以假设异步任务永远不会在单独的线程上运行?我说的是Windows窗体应用程序。也许将来我希望它作为控制台应用程序运行。AFAIK,在控制台应用程序中,异步任务在单独的线程上运行。如果任务在单独的线程上运行,询问任务的首选习惯用法是什么?这样我就可以在必要时建立锁。我不知道我是否真的需要一把锁,这让我想

c# - 如何让任务异常传播回 UI 线程?

在TPL中,如果Task抛出异常,该异常被捕获并存储在Task.Exception中,然后遵循observedexceptions上的所有规则.如果它从未被观察到,它最终会在终结器线程上重新抛出并使进程崩溃。有没有办法阻止Task捕获该异常,而只是让它传播?我感兴趣的任务已经在UI线程上运行(由TaskScheduler.FromCurrentSynchronizationContext提供),我希望异常转义以便它可以由我现有的Application.ThreadException处理处理程序。我基本上希望Task中未处理的异常表现得像按钮单击处理程序中的未处理异常:立即在UI线程上传

c# - 当你不能等待时,你怎么能等待任务

我正在开发Windows8运行时组件,因此公共(public)接口(interface)不能包含Task因为它不是Windows运行时类型。这意味着我无法将该方法标记为async不能awaitprivateasync我的库中的方法。这导致了对如何处理我的应用程序逻辑的一些困惑。这就是我同步做我想做的事情的方式。Resultr=TryGetAuthResultFromFile();if(r!=null){returnr;}r=GetAuthResultFromWebAuthenticationBroker();returnr;问题是TryGetResultFrom文件是asyncTask