Поток графического интерфейса Windows Forms время от времени останавливается на секунду, а затем во время асинхронного HttpClient SendAsync
.За исключением этого, все работает отлично (я получаю данные).Я хочу делать частые и, надеюсь, параллельные запросы к различным серверам для частого обновления экрана.Я пытаюсь запустить несколько запросов, которые публикуют ответы для обработки потоком GUI позже.Код ниже является упрощением моего кода.Я проверил время до и после SendAsync
и вижу, что иногда оно составляет до 2 секунд, пока окно GUI заморожено (его нельзя перемещать, прокручивать и т. Д.) И таймер опроса неактивен (счетчик никогда не увеличивается).
Использование async Task DoWork
не помогло.
class Worker
{
HttpClient client = new HttpClient();
bool busy = false;
string data = "";
//public async Task DoWork()
public async void DoWork()
{
if ( busy ) return;
busy = true;
HttpRequestMessage request = new HttpRequestMessage(method, requestUrl);
HttpResponseMessage response = await client.SendAsync( request );
data = ... from response ...
busy = false;
}
}
int counter;
private void Update(object sender, EventArgs e)
{
++counter;
foreach ( Worker worker in workers )
worker.DoWork();
}
...
List<Worker> workers = ...
var poll = new System.Windows.Forms.Timer();
poll.Tick += Update;
poll.Interval = 250;
poll.Enabled = true;
...