А что значит "в многопотоке"?
А по тому, что понял, у вас много излишнего кода.
Task.Run
и так будет выполнен в отдельном потоке
Отдавайте созданный таск наружу
class Portizan
{
void Method()
{
Random rnd = new Random();
int wait = rnd.Next(10000, 25000);
Console.WriteLine($"Будет идти {wait} мс");
System.Threading.Thread.Sleep(wait);
}
Task MethodAsync()
{
var task = Task.Run(() => Method());
Console.WriteLine($"Вызвал метод MethodAsync");
return task;
}
public Task GoAsync()
{
return MethodAsync();
}
}
Только
Thread.Sleep // не лучшее решение для вашей задачи, так как заблокирует поток из пула потоков.
И конечное ожидание будет
class Test
{
public async Task ZgorAsync()
{
var tasks = Enumerable.Range(0, 10)
.Select((x) => {
Portizan portizan = new Portizan();
return portizan.GoAsync();
})
.ToArray();
await Task.WaitAll(tasks);
}
}