首页 > 解决方案 > 如何重载函数以接受回调参数的异步和同步版本

问题描述

public static T SyncVer<T>(Func<T> callback)
{
    using (new LogContext("new logging context"))
    {
        try
        {
            return callback();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);

            throw;
        }
    }
}

public static async Task<T> AsyncVer<T>(Func<Task<T>> callback)
{
    using (new LogContext("new logging context"))
    {
        try
        {
            return await callback();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex);

            throw;
        }
    }
}

请考虑上面的代码。您可能会看到两个函数中的大部分代码是相同的。我正在寻找一种通过将它们重载为一个来将它们分组的方法(或者如果有办法取出两个函数的相似部分),这样我就不需要复制内容了?

提供的任何帮助将不胜感激。提前致谢。

标签: c#async-awaittaskoverloadingmultitasking

解决方案


我会尝试这样的事情:

public static T SyncVer<T>(Func<T> callback)
{
    return AsyncVer(() => Task.FromResult(callback())).GetAwaiter().GetResult();
}

推荐阅读