- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
考虑以下代码
async Task<int> foo()
{
await Task.Delay(1000);
return 42;
}
...
// OPTION 1
Task t = Task.Factory.StartNew(foo,
CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
t.Wait();
...
// OPTION 2
Task t = foo();
t.Wait()
问题
两个调用选项之间的实质区别是什么?
在选项 1 中。假设我覆盖了默认的 TaskScheduler。对于 foo 方法中的 await - 将使用哪个 TaskScheduler?它会使用默认值还是传递给父任务的参数?
最佳答案
不过,一般来说,“选项 1”将创建一个新任务,它将对 foo()
的调用包装起来。 , 有效地制作了一个 Task<Task<int>>
.当您调用 .Wait()
在它上面,它不会等待内部任务完成,因为内部任务几乎会立即返回(一旦 Task.Delay
)被命中。
关于您关于使用非默认 TaskScheduler
的问题,一般来说,它不会改变行为,除非它可能会阻塞直到自定义调度程序启动任务。如果没有关于相关调度程序的更多信息,就不可能确切知道会发生什么。
然而,第二个选项将阻塞直到延迟完成,因为它将启动任务,并阻塞直到延迟完成。
关于c# - 在 async/await 中调用 async 方法和 TaskScheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24560554/
假设我想创建一个自定义 TaskScheduler,但在其中,如果某些条件不适用,则回退到默认值。我该怎么做? 例如 protected override void QueueTask(Task ta
任务并行库非常棒,在过去的几个月里我经常使用它。然而,有件事确实困扰着我:事实上 TaskScheduler.Current是默认的任务计划程序,而不是 TaskScheduler.Default 。
我有一个从数据库中获取产品的任务,以及操作一些 UI 修改的 ContinueWith 操作,因此我遇到了一个问题,因为任务创建了一个新线程,并且没有执行 UI 修改在 UI 线程中。 我尝试使用此修
我有一个具有多个Dispatcher(又名 GUI 线程、又名消息泵)的应用程序,以确保 GUI 的缓慢且无响应的部分运行,而不会严重影响应用程序的其余部分。我也经常使用 Task。 目前,我的代码可
我要实现的是: 任务调度程序,将任务排入队列并并行运行指定数量,而其他任务则在队列中等待开始。每个任务都有超时,当任务运行时开始计数,如果超过该时间,任务将被取消并抛出 TimeoutExceptio
我有一些使用 ReaderWriterLockSlim 的代码。当某个对象被构造时,我在它上面获取写锁,并在一段时间后处理该对象时释放它。但是,由于这些调用的来源,我不能保证它们会在同一个线程上,这是
我发现不需要声明额外的 TaskScheduler,我可以像这样执行任务: 但是你能帮我解释一下吗,为什么不需要像下面这样的? 最佳答案 通用时间表
我在同一台服务器上有两个 spring boot 应用程序 (1.4.3.RELEASE)。应用程序 A 是一个单体应用程序,其中包含用于处理警报的部分代码,而应用程序 B 是一个仅处理警报的新专用应
在阅读了一些关于 TaskScheduler ( good article here ) 的内容后,发现 TaskScheduler 可以: 安排任务 - 通过使用 QueueTask 方法,在上面的
我有以下使用隐式调度的方法: private async Task FooAsync() { await Something(); DoAnotherThing(); await S
根据我的研究,我了解到以下内容: TaskScheduler.UnobservedTaskException必须等待任务被垃圾回收,然后该任务的未观察到的异常才会冒泡到 UnobservedTaskE
我需要在 Windows Server 2008 上通过 Powershell v2 安排任务。我正在使用 MS PowershellPack 中的 TaskScheduler 模块。 . 可以安排任
上个月我问了以下问题,这导致我学习了 TaskEx.Yield: Can async methods have expensive code before the first 'await'? 但是,
actors 中的异步等待支持 我正在将 actor 库 Akka 移植到 .NET ( https://github.com/rogeralsing/Pigeon )我想在我的 Actor 内部添加
我想打印我创建的任务的特定触发器,如何使用 QT Framework 在 C++ 中执行此操作,最好的方法是什么?另外,创建具有多个任务的动态调度程序并能够检索每个任务信息的最佳方法是什么? 最佳答案
TaskScheduler.Default 不总是保证任务将在池线程上执行吗? 在修复 bug 时,我至少发现了一个没有修复的情况。它可以像这样重现(一个由真实代码制作的人为示例): var tcs
我有自己的 TaskScheduler 实现。它存在的主要原因是它将处理器核心亲和性设置为运行我的任务的线程。 当我以下列方式使用它时: var myTaskSceduler = new MyTask
我正在尝试使用 the following custom task scheduler限制并发网络请求: 我是这样使用它的: const int CONCURRENCY_LEVEL = 2; stat
我正在寻求并行化我的项目中的一些工作,我首先使用了 Parallel.ForEach 并且它同时运行得很好,然后首席开发人员过来说他不太喜欢这个并想改变那个。 然后我决定沿着 TaskFactory
我试图设置一个 cron 来在我的 Windows 服务器上运行一个 php 脚本。该脚本在手动访问时运行良好,但无法通过任务计划运行。 问题是: // Code to fetch stuff fro
我是一名优秀的程序员,十分优秀!