Целью следующего кода является включение любой заданной функции в ожидаемую функцию. Идея состоит в том, чтобы использовать его при извлечении данных из db, предоставляя коду гибкость либо использовать функции синхронной выборки (наложение моего текущего ORM), либо использовать те же функции, что и async.
Я знаю, что может быть много чего не так с концепцией кода. К настоящему моменту я просто пытался избавиться от ошибок компилятора, поэтому я могу запустить код и проверить его поведение. Но, конечно, я открыт для обсуждения концепции заранее, и если вся идея позади не так, используйте мое время более эффективно, чтобы найти другое решение.
async static void Main()
{
// The following line gives a compiler error:
// Error 1 The best overloaded method match for 'CastFuncToTask<int>(System.Func<int>)' has some invalid arguments
int task = await CastFuncToTask<int>(TestFunc(2));
}
private static Task<T> CastFuncToTask<T>(Func<T> func)
{
TaskCompletionSource<T> taskCompletionSource = new TaskCompletionSource<T>();
T result = func.Invoke();
taskCompletionSource.SetResult(result);
return taskCompletionSource.Task;
}
private static int TestFunc(int testInt)
{
return testInt * 2;
}