2015-02-11 3 views
0

Я хочу использовать очередь задач для фона в моем приложении C#.Использование Task.Factory.StartNew для очереди задач

От чтения материалов в Интернете я понял, что вызов Task.Factory.StartNew поставит в очередь задачу в очереди TaskScheduler.

Когда я это делаю, я получаю предупреждение о компиляторе, потому что я не ожидаю результата Task.Factory.StartNew.

Но в моем случае код вызова не заинтересован в результате выполнения задачи. У меня есть код, который имеет дело с отказом в задаче, но это не ответственность вызывающего кода.

Я пытаюсь понять, мой подход правильный или есть более подходящий способ «C#» для выполнения очереди задач.

+0

Не могли бы вы разместить пример кода? Я заинтригован предупреждением компилятора о том, что вы получаете –

ответ

3

Я хочу использовать очередь задач для фона в моем приложении C#.

Хотя это возможно, это почти никогда не лучший подход.

Вместо очереди заданий, что вы, вероятно, хотите, либо дросселем фоновые задачи (разрешающие любой заказ), или очереди операций выполнить.

Если вы хотите дросселировать, ознакомьтесь с SemaphoreSlim.

Если вам нужна очередь операций, ознакомьтесь с ActionBlock<T> от TPL Dataflow.

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

+0

Очень хороший момент, особенно если таких заданий будет много. – Jeb

+0

Чтение о 'ActionBlock' взяло мое понимание параллелизма в CLR гигантским прыжком вперед, поэтому спасибо. (Я из фона Java). Но я думаю, что я также понял, что «async-wait» - это просто очередь задач. Чувство настолько разное, что мне потребовалось время, чтобы понять, что он делает то, что мне нужно. Я буду придерживаться этого, поскольку это делает мой код очень простым. Но я принимаю ваш ответ, чтобы он мог просвещать других людей. – daramasala

Смежные вопросы