c# - 是否有一种通用方法来定义既不接收 Action 也不接收 Func<Task> 的方法?

标签 c# async-await action func

我有一个方法A包装另一个方法的执行 B通过在它之前和之后运行一些逻辑。方法B可以是一个任务,也可以不是。所以为了能够 await当方法 B我必须执行两次 A 的任务方法如下:

public async Task A(int id, Action<int> b)
{
    try
    {
        await BeforeAsync(id);
        b(id);
        await AfterAsync(id);
    }
    catch (Exception ex)
    {
        Handle(ex, id);
    }
}

public async Task A(int id, Func<int,Task> b)
{
    try
    {
        await BeforeAsync(id);
        await b(id);
        await AfterAsync(id);
    }
    catch (Exception ex)
    {
        Handle(ex, id);
    }
}

有没有办法避免重复?

最佳答案

并非如此,假设一些愚蠢的事情,例如传递一个对象并使用强制转换计数来测试它:)

这个怎么样?

public Task A(int id, Action<int> b) => A(id, x => { b(a); return Task.CompletedTask; });

这样你就不会重复代码。

关于c# - 是否有一种通用方法来定义既不接收 Action 也不接收 Func<Task> 的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57563964/

相关文章:

ios - 为什么较大的图像不会出现在共享扩展或操作扩展中?

c# - Mono:如何在新的控制台/终端窗口上运行 bash 命令?

c# - 如何将类的对象作为字符串运算符分配给变量?

c# - 在 C# 中使用超时更改按钮的文本

node.js - 一起使用 Promise 和 async

c# - 在没有等待的情况下调用的异步方法中的等待是否仍然是异步的?

java - 如何在 Swing 中手动调用 Action ?

c# - 运算符重载和继承 c#

c# - .NET 中是否有一些流 "pipe"类?

c# - 为什么我不能对 ThreadStart 使用/强制执行 Action?