Немного неясно, о чем вы спрашиваете ... Хотя, если вы хотите показывать результаты по мере их поступления. Есть много способов достижения этого, например разъединенные сообщения , события , т. Д.
Тем не менее, вы можете просто использовать простой Action
private static async Task<List<DeviceResponseData>> GetResponseData(MyClient client, Action<DeviceResponseData> update, int timeout = 5000)
{
var cancellationToken = new CancellationTokenSource(timeout);
...
while (!cancellationToken.IsCancellationRequested)
{
// Wait indefinitely until any message is received.
var response = await client.ReceiveAsync(cancellationToken.Token);
var result = new DeviceResponseData( /* ... */ response);
data.Add(result);
update(result);
}
...
}
использование
var allResults = await GetResponseData(client,data => UdpateUI(data), timeout);
Примечание : поскольку в этом шаблоне асинхронного ожидания вам не нужно маршалировать результат из Action
обратно в контекст пользовательского интерфейса, если он был вызван из