创建类型化异步任务

时间:2016-12-09 10:10:00

标签: c# asynchronous async-await task

我想在不启动它们的情况下创建一些异步任务。 使用无类型的任务没有问题:

    private Task CreateTask() {
        return new Task(
             async () => await DoSomething().ConfigureAwait(false));
    }

但是为了处理Exceptions,我在函数中添加了一个返回值。但是我怎样才能用正确的语法编写它:

    private Task<bool> CreateTask() {
        return new Task<bool>(
            async () =>  await DoSomething().ConfigureAwait(false));
    }

我收到消息,异步lambda表达式无法转换为func。 所以我的问题是:如何正确编写?

1 个答案:

答案 0 :(得分:3)

  

我想在不启动它们的情况下创建一些异步任务。

对于您要解决的任何问题,这是错误的解决方案。如果要定义要在将来运行的代码,则应使用委托:

private Func<Task> CreateTaskFactory()
{
  return async () => await DoSomething().ConfigureAwait(false);
}
  

但是为了处理Exceptions,我在函数中添加了一个返回值。

同样,这不是最好的解决方案。任务已经理解异常,而无需编写任何其他代码。

如果你需要返回一个值(作为 data ),那么你可以返回一个创建Task<T>的代表:

private Func<Task<int>> CreateTaskFactory()
{
  return async () => await DoSomethingReturningInt().ConfigureAwait(false);
}