Tag: 长时间运行的进程

具有取消能力的长时间运行模式

为了执行长时间运行(让它在此上下文中搜索)操作,我将加载逻辑放在TPL任务中,因此在后台线程上调用通用方法Search() 。 Search()操作可以足够长,因此我需要能够使用CancellationToken正确取消它。 但是Search()操作直到完成才返回,所以我必须做一些逻辑才能实现方便和(!)快速取消。 使用WaitHandle我可以实现这样的事情: private void StartSearch() // UI thread { CancellationTokenSource s = new CancellationTokenSource(); Task.Factory.StartNew(() => StartSearchInternal(s.Token), s.Token) } private void StartSearchInternal(CancellationToken token) // Main Background Thread { ManualResetEvent eHandle = new ManualResetEvent(false); Task.Factory.StartNew(() => Search(eHandle ), TaskScheduler.Default); WaitHandle.WaitAny(new [] { eHandle, token.WaitHandle }); token.ThrowIfCancellationRequested(); } private IEnumerable Search(ManualResetEvent e) // Another […]