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;
}
uj5u.com熱心網友回復:
如果您的函式都接受一個CancallationToken引數并回傳 aTask它應該很簡單:
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));
uj5u.com熱心網友回復:
您可以HandleEvent像這樣實作該方法:
public static EventHandler HandleEvent(Func<Task> action)
{
return async (s, e) =>
{
try
{
await action();
}
catch (Exception ex)
{
Log.Error(ex.ToString());
}
};
}
然后,假設Event事件是型別EventHandler:
public event EventHandler Event;
...你可以使用這樣的HandleEvent方法:
obj1.Event = HandleEvent(() => function1(stoppingToken));
我認為不可能以HandleEvent允許您省略的方式實作() =>:
// Not possible
obj1.Event = HandleEvent(function1(stoppingToken));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/531193.html
標籤:C#仿制药事件代表任务
