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));