使用带有int形参调用的Action初始化任务

本文关键字:Action 初始化 任务 调用 形参 int | 更新日期: 2023-09-27 18:16:38

在我的类中有以下构造函数,它初始化了我的任务:

 public ReportGeneratorThread(Func<int, bool> getPermission, Action<object> a)
    {            
        this.action = a;           
        this.t = new Task(this.action = this.InvokedAction, this.cancellationToken);
        this.getPermission = getPermission;            
    }

将由任务调用的InvokedAction方法定义如下:

private void InvokedAction(object obj)
    {        
        Debug.WriteLine(DateTime.Now.ToLongTimeString() + " Task " + this.t.Id + " has STARTED Generating a report");
        this.GenerateReport();
        throw new ArgumentException("For testing purpose");                   
    }

当我想用int而不是对象来调用这个方法时,问题就出现了,因为任务不接受int。有什么方法可以让我用int值来调用这个方法吗?

Action<int>

使用带有int形参调用的Action初始化任务

因为你不能用object类型的参数调用Action<int>,你需要手动转换它。请注意,如果需求是其他方式,则可以很容易地通过Action<object>,而Action<int>是预期的。

... new Task( v => intAction((int)v),...

如果不能保证实参总是整数,则可能需要处理强制类型转换异常。

可以在调用int之前进行框化吗?

int i = 123;
object o = i;