У меня есть задача TPL, которая делает две вещи. Во-первых, он вызывает веб-службу. Во-вторых, он вставляет некоторые данные в базу данных. У меня есть до 20 задач, которые запускались в одно и то же время снова и снова. Все, что они делают весь день, - это веб-службы вызова и вставка данных в базу данных.
Я новичок в TPL в .NET. Я сделал некоторые вещи с фоновыми рабочими процессами и асинхронными веб-службами.
Вызов веб-службы и вставка базы данных блокируют вызовы в потоке, в котором запущена задача.
Я понимаю, что под обложками, когда вы используете Tasks,.NET управляет пулом потоков для вас. Да?
Будет ли пул потоков иметь больше потоков в его распоряжении, если я сделал вызов службы и вызов базы данных с помощью async и wait() вместо того, чтобы блокировать вызовы?
Моя теория (и я не уверен, почему я так думаю) заключается в том, что поток занят тем, что ничего не делает, ожидая блокирующей веб-службы и не может временно вернуть свои ресурсы в пул. Но я задаюсь вопросом, ждут ли задачи для асинхронных вызовов, чтобы завершить то, сможет ли основной поток задач переключиться, чтобы другие процессы обрабатывались во время ожидания.
Является ли моя теория правильной? Или я делаю вещи?
Я использую С# и .NET 4.0, но при необходимости я мог бы перейти к 4.5.