使用C#中的Tasks编写异步方法的新功能。这是一个关于如何架构从跨应用程序层调用异步任务的问题。
我有一个数据访问层,可以对服务器进行REST调用。我为每个服务器调用实现了Async方法,每个方法都返回一个Task。
我有一个业务逻辑层,可以调用数据访问层。对异步业务逻辑层的请求采用回调,一旦任务使用ContinueWith()
完成,就会执行回调。因此,异步执行的细节包含在业务逻辑层中。
我想知道这种设计选择是否有意义,或者我的业务层是否更好地将Task对象传递给其调用者?
这是我到目前为止DateManager
的一个例子。没有await
,我写的就像我在这里一样。但是,从我的视图控制器中,使用回调调用DateManager.GetTradeDate()
现在可能很尴尬。
public class DateManager : IDateManager
{
public void GetTradeDate(string dt, Action<string> callback)
{
DateManagerClient dmc = new DateManagerClient();
Task<string> t = dmc.GetTradeDateAsync(dt);
t.ContinueWith(x =>
{
callback(x.Result);
});
}
}
答案 0 :(得分:0)
即使你不能使用async / await关键字,我仍然建议将任务返回给调用者。
我建议这是因为几个原因:
正如您可能会注意到的,我的观点主要是在这里发言(#1除外,这是非常可靠的好处)。但这是我能用我的经验给出的最佳答案(我还没有使用异步/等待任务而且男孩很痛苦)