创建返回泛型函数的函数



obj1.Event占用Func<CancellationToken,Task>

如此:

obj1.Event += async _ =>
{
try
{
await function1(stoppingToken);
}
catch (Exception ex)
{
Log.Error(ex.ToString());
}
};

如何创建一个返回泛型函数ex的函数?

obj1.Event += HandleEvent(function1(stoppingToken))
obj2.Event += HandleEvent(function2(stoppingToken))
obj3.Event += HandleEvent(function3(stoppingToken))

可能与此接近,但这不起作用!

public Func<CancellationToken, Task> HandleEvent<T???>(Func<T> ????)
{
return func;
}

如果您的函数都接受单个CancallationToken参数并返回Task,则应该像这样简单:

obj1.Event += function1;
obj2.Event += function2;
obj3.Event += function3;

注意,当Event被调用时,它会将自己的CancellationToken传递给你的函数。

如果你想传递stoppingToken实例,你可以这样创建闭包:

obj1.Event += _ => function1(stoppingToken);
obj2.Event += _ => function2(stoppingToken);
obj3.Event += _ => function3(stoppingToken);

如果你需要额外的代码被调用(例如你的try..catch在问题中),你可以这样做:

public Func<CancellationToken, Task> HandleEvent(Func<CancellationToken, Task> func)
{
return async cancellationToken =>
{
try
{
await func(cancellationToken);
}
catch (Exception ex)
{
Log.Error(ex.ToString());
}
}
}
// Using token from Event
obj1.Event += HandleEvent(function1);
obj2.Event += HandleEvent(function2);
obj3.Event += HandleEvent(function3);
// Using stoppingToken
obj1.Event += HandleEvent(_ => function1(stoppingToken));
obj2.Event += HandleEvent(_ => function2(stoppingToken));
obj3.Event += HandleEvent(_ => function3(stoppingToken));

最新更新