Какой приоритет имеет установленная дочерняя работа в Hangfire при использовании ContinueWith?

Мое приложение использует Hangfire для обработки фоновой работы. Я создаю фоновые задания следующим образом:

var parentJobId = _backgroundJobClient.Enqueue<IMyService>(x => x.ParentMethod(id));
_backgroundJobClient.ContinueWith<IMyService>(parentJobId, x => x.ChildMethod(id));

_backgroundJobClient.Enqueue<IMyService>(x => x.OtherMethod1(id));
_backgroundJobClient.Enqueue<IMyService>(x => x.OtherMethod2(id));

Эти методы определены в сервисе следующим образом:

public interface IMyService
{
    [Queue(HangfireQueuePriority.Default)]
    void ParentMethod(int id);

    [Queue(HangfireQueuePriority.Default)]
    void ChildMethod(int id);       

    [Queue(HangfireQueuePriority.Default)]
    void OtherMethod1(int id);  

    [Queue(HangfireQueuePriority.Critical)]
    void OtherMethod2(int id);      
}

Я хочу, чтобы OtherMethod2 работал, как только закончилось родительское задание. Мое понимание ContinueWith заключается в том, что дочернее задание выполняется после родительского задания, но в документации Hangfire не указано, как скоро будет выполняться дочерняя задача.

Мой вопрос - что такое «приоритет» дочерней задачи над другими задачами в очереди? Есть ли вероятность того, что любая задача, определенная в очереди, будет выполняться между Очереди по умолчанию и ChildMethod? например, OtherMethod1 или ParentMethod

c#,.net,background-process,hangfire,

1

Ответов: 2


0

Мой вопрос - что такое «приоритет» дочерней задачи над другими задачами в очереди?

Все задания в критических очередях будут получены сначала до ChildMethod независимо от уровня параллелизма.

Есть ли вероятность, что любая задача, определенная в очереди, будет выполняться между ParentMethod и ChildMethod? например, OtherMethod1 или OtherMethod2

С технической точки зрения, основанный на моем первом ответе на ваши первые очереди, все задания в критической очереди будут сначала загружены, и это будет включать ваши OtherMethod2. В настоящее время все остальные работы находятся в Default Queuesи по умолчанию замедленного воспламенение настроено для выполнения заданий Параллельно в базе имеющегося количества работника . Это означает, что есть шанс, что они OtherMethod1могут работать между ними ParentMethodи ChildMethodпотому, что все они под ним Default Queues.


0

Для этой проблемы я использую 2 сервера hangfire. Первый использует очереди вроде этого «Продолжить, по умолчанию». Второй, как этот «По умолчанию, Продолжить»,

ваше продолжение должно быть в очереди «Продолжить».

Таким образом, когда задача входит в очередь «Продолжить», если первая занята, второй сервер берет ее, даже если она занята заданием по умолчанию.

Я использую это, потому что, когда у меня есть партия с тысячами в очереди и тысячами, я хочу, чтобы две очереди выполнялись параллельно.

C # ,. сеть, фон-процесс, замедленное воспламенение,