Если вы хотите использовать сон, вам, вероятно, следует использовать Task.Delay
.Эта запись предоставит вам более полное представление о том, когда использовать Thread.Sleep
и когда использовать Task.Delay
.
Второй , в вашем коде, Что вам следуетdo вместо await и sleep имеет следующий вид:
public async void GetImages()
{
var tasks = new List<Task>();
for (int i = 0; i < someCounter; i++)
{
tasks.Add(myRequest.GetImage(url));
}
await Task.WhenAll(tasks).ConfigureAwait(false);
}
Обратите внимание на вызов WhenAll
в конце цикла for
, который создаст задачу, которая будетзавершить, когда все поставленные задачи завершены.
Затем ConfigureAwait(false)
сообщает ожидающему, что вам не нужно возобновлять работу в текущем контексте (в данном случае «в текущем контексте» означает «вПоток пользовательского интерфейса ")
Третий , при вызове URL измените его на Task.Run
:
public class Request()
{
public async Task<Bitmap> GetImage(string url)
{
using (var client = new Url(url)
{
//return as image
var content = await Task.Run(() => client.GetStringAsync());
}
}
}
, который вы используете Task.Run
для вызова метода, а не как часть реализации способа.