提问人:chrisg229 提问时间:11/10/2022 最后编辑:Theodor Zouliaschrisg229 更新时间:11/11/2022 访问量:77
创建一个返回泛型函数的函数
Creating a function that returns a generic function
问:
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;
}
答:
2赞
Johnathan Barclay
11/10/2022
#1
如果你的函数都接受一个参数并返回一个,它应该很简单,如下所示: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));
评论
HandleEvent
T
CancellationToken
Task
Task
HandleEvent