我在尝试了解Func
在C#中的工作原理时遇到了一些问题,尽管已阅读了少量好博客文章。在C#中使用Func处理任务#
我有以下情形: 我正在构建一个使用Azure服务总线队列处理帐单的小型帐单系统。还有,可以由用户初始化两个过程:
- 用于检查之前,为客户创造
的实际发票对于这个
bool
参数来确定是否需要创建一个日记帐或实际帐单。在此方法中,我运行以下检查: if (isDayBookProcessing)
{
// Daybook processing code here
}
else
{
// Run queue process async
StartQueueProcess(queueName, billingTaskId, numOfItemsEnqueued);
}
然后我有一个一般的“StartQueueProcess”的方法,这是在它自己的运行Task
像这样:
private void StartQueueProcess(string queueName, int billingTaskId, int numOfItemsEnqueued)
{
Task.Factory.StartNew(() => _factory.AzureFactory.ServiceBus.ProcessBillingQueue(queueName, billingTaskId, numOfItemsEnqueued));
}
正如你可以看到,StartQueueProcess
方法运行ProcessBillingQueue
方法对我ServiceBus
类,这意味着它不能运行ProcessDaybookQueue
我最初以为是只利用Func<string, int, int, bool>
的d使StartQueueProcess
方法返回一个布尔(因为Func
需要返回的东西),使它看起来像这样:
if (isDayBookProcessing)
{
// Daybook processing code here
StartQueueProcess(_factory.AzureFactory.ServiceBus.ProcessDaybookQueue(queueName, billingTaskId, numOfItemsEnqueued));
}
else
{
// Run queue process async
StartQueueProcess(_factory.AzureFactory.ServiceBus.ProcessBillingQueue(queueName, billingTaskId, numOfItemsEnqueued));
}
private bool StartQueueProcess(Func<string, int, int, bool> processMethod)
{
Task.Factory.StartNew(() => processMethod);
return true;
}
然而,这给出了一个错误,告诉我,Argument type 'void' is not assignable to parameter type 'System.Func<string, int, int bool>'
我_factory.AzureFactory.ServiceBus.ProcessDaybookQueue(queueName, billingTaskId, numOfItemsEnqueued)
返回void。使其返回Func<string, int, int, bool>
不会导致错误。但为什么呢?我应该不能让它返回我想要的(即无效)?
任何人都可以对此有所了解吗? :-)
有关这个主题的大文章:http://goo.gl/gWgzPP –
非常感谢! :-) –