这似乎是一个XY 问题。
第一个完成后如何启动第二个后台作业?(问题 X)
不支持保证作业的顺序和条件执行。
也就是说,后台作业会自动重试,这允许下面的方式 3。
因此,您可以通过以下方式之一有效地实现这一目标:
- 将两项工作合并为一项工作。
- 将第二个作业排入第一个作业中。
- 将两个工作都排入队列(你不需要使用
ContinueWith
,await
更整洁)。在第二个作业中,检查第一个作业是否创建了它需要的内容。否则,抛出异常并依赖重试。
使用时我需要什么的语法是什么ContinueWith
?(解决方案 Y)
除了方式 3 的一个不太理想的变体之外,没有任何语法。
Task.ContinueWith
是在EnqueueAsync
任务之后运行的 C# 构造,而不是实际的后台作业。
Way 3 的语法ContinueWith
类似于:
var measureJobId = await _backgroundJobManager.EnqueueAsync<FileProcessBackgroundJob, FileProcessJobArgsDto>(
new FileProcessJobArgsDto
{
Id = Id,
User = user,
}
)
.ContinueWith(task => _backgroundJobManager.EnqueueAsync<AnalyticsBackgroundJob, AnalyticsJobArgsDto>(
new AnalyticsJobArgsDto("measureJob")
)
.Unwrap();
将其与以下内容进行比较:
var processJobId = await _backgroundJobManager.EnqueueAsync<FileProcessBackgroundJob, FileProcessJobArgsDto>(
new FileProcessJobArgsDto
{
Id = Id,
User = user,
}
);
var measureJobId = await _backgroundJobManager.EnqueueAsync<AnalyticsBackgroundJob, AnalyticsJobArgsDto>(
new AnalyticsJobArgsDto("measureJob")
);