如何将异步任务存储在字典中并根据配置值调用它们?
Posted
技术标签:
【中文标题】如何将异步任务存储在字典中并根据配置值调用它们?【英文标题】:How can I store async task in a dictionary and call them according to config value? 【发布时间】:2021-10-06 07:41:39 【问题描述】:下面是我的代码:
public interface IResponseEntity
public class ResponseEntity : IResponseEntity
public string Status get; set;
public string Message get; set;
public string Data get; set;
public class ObjectForRequest
public string abcd get; set;
public string xyz get; set;
public string pqrs get; set;
public short mnop get; set;
private async Task<IResponseEntity> Dowork_for_A(ObjectForRequest objReq)
//Code for A
....................
private async Task<IResponseEntity> Dowork_for_B(ObjectForRequest objReq)
//Code for B
....................
private async Task<IResponseEntity> Dowork_for_C(ObjectForRequest objReq)
//Code for C
....................
private async Task<IResponseEntity> Dowork_for_D(ObjectForRequest objReq)
//Code for D
....................
public async Task<IResponseEntity> method(ObjectForRequest objReq)
if (CONFIGVALUE == 'A')
return await Dowork_for_A(RequestOBJ);
else if (CONFIGVALUE == 'B')
return await Dowork_for_B(RequestOBJ);
else if (CONFIGVALUE == 'C')
return await Dowork_for_C(RequestOBJ);
else if (CONFIGVALUE == 'D')
return await Dowork_for_D(RequestOBJ);
else
return null;
好像现在我正在检查 if 条件中的配置值,然后调用异步任务返回值。
如何将 <key, value>
字典对设置为配置值作为“键”和“值”作为异步任务?或者换句话说,我
【问题讨论】:
不是我的专长,但这不就是 Actions 的用途吗? 您能否举例说明您如何使用包含Task
s 的Dictionary
?
我认为你在method
中有错字 - RequestOBJ
应该是 objReq
对吧?
【参考方案1】:
这很简单。像这样声明你的字典:
Dictionary<char, Func<ObjectForRequest, Task<IResponseEntity>>> _actions =
new Dictionary<char, Func<ObjectForRequest, Task<IResponseEntity>>>()
'A', Dowork_for_A ,
'B', Dowork_for_B
// ...
然后:
public async Task<IResponseEntity> method(ObjectForRequest objReq)
Func<ObjectForRequest, Task<IResponseEntity>> action;
if (!_actions.TryGetValue(CONFIGVALUE, out action))
return null;
return await action(objReq);
另外,请务必考虑这对性能的影响。字典对于大型集合来说速度很快,但如果你真的只有 3 或 4 个选项,switch
或 if ... else
链几乎肯定会更快。当Dictionary
变得更好时,确切的临界点是什么很难说。
【讨论】:
如果只有 3 或 4 个选项并且您正在启动一项任务,那么使用字典或开关等的相对速度几乎不会成为问题。以上是关于如何将异步任务存储在字典中并根据配置值调用它们?的主要内容,如果未能解决你的问题,请参考以下文章