Передача задачи в качестве параметра
Я не уверен, возможно ли это, поэтому здесь меня
У меня есть последовательность действий для выполнения нескольких
async Task MethodA(...)
{
// some code
// a call to specific Async IO bound method
// some code
}
это такжеMethodB()
, MethodC()
и т. д., и все они имеют одинаковый код, за исключением вызова конкретного метода, связанного с асинхронным вводом-выводом. Я пытаюсь найти способ передать указатель задачи на метод, чтобы мы могли выполнить его позже в методе ().
Что я сейчас делаю, так это:
private async Task Method(Func<Task<Entity>> func)
{
// some code
var a = await task.Run(func);
// some code
}
var task = async () => await CallToIOBoundTask(params);
Method(task);
Этот код, однако, каждый раз вытягивает новый поток, который не требуется для задачи, связанной с вводом-выводом, и его следует избегать.
Итак, есть ли способ реорганизовать код так, чтобы поток ThreadPool не использовался? Цель состоит в том, чтобы иметь такой код:
private async Task Method(Task<Entity> task)
{
// some code
var a = await task;
// some code
}
Также важно отметить, что разные вызовы ввода-вывода имеют разные сигнатуры методов. Также задание может начать выполняться только вMethod()
кузов, а не раньше.