【发布时间】:2016-02-09 08:58:13
【问题描述】:
我有一个async 方法:
public async void BillSubscriptions()
{
await Task.Run(() => ProcessSubscriptions(_subscriptionRepository));
await Task.Run(() => ProcessNonRecurringSubscriptions(_subscriptionRepository));
await Task.Run(() => ProcessTrialSubscriptions(_subscriptionRepository));
}
请注意,ProcessSubscriptions、ProcessNonRecurringSUbscriptions 和 ProcessTrialSUbscriptions 是私有 void 方法,而不是异步方法。
所有这些方法都从数据库中检索数据并根据一些算法对其进行处理和更新数据库。
我的问题是,上面的代码是否等同于下面的代码?
public async void BillSubscriptions()
{
ProcessSubscriptions(_subscriptionRepository);
ProcessNonRecurringSubscriptions(_subscriptionRepository);
ProcessTrialSubscriptions(_subscriptionRepository);
}
【问题讨论】:
-
在什么方面等效?
-
我的意思是下面的代码是在 BillSubscriptions 方法的同一线程中运行的正常同步调用。我的问题是上面的调用也是在不同线程中运行的异步调用但是因为等待是同步的?
-
另一个问题,为什么我要使用上面的代码而不是下面的代码,使用上面的代码对我有什么好处?
-
@NadeemTabbaa:我认为核心误解是围绕
async和线程。简单地说,async不在后台线程上运行代码。
标签: c# .net multithreading asynchronous async-await