从LINQ的Any方法返回任务<bool>?

时间:2017-09-19 10:05:43

标签: c# linq asynchronous task

我有这个界面:

public interface ISign
{
   Task<bool> IsRegisteredCopy();
}

实施它:

public class Sign : ISign
    {
        TabibContext context = new TabibContext();
        public Task<bool> IsRegisteredCopy()
        {
            return context.Doctors.Any();
        }
    }

所以我需要从Any方法中返回不可用的任务!

2 个答案:

答案 0 :(得分:6)

实体框架有System.Data.Entity命名空间中可以使用的async extensions。所以你可以这样做:

using System.Data.Entity;

public Task<bool> IsRegisteredCopy()
{
    return context.Doctors.AnyAsync();
}

答案 1 :(得分:1)

你有几种方法可以做到这一点。其中一个是Matthew Watson的方式(return Task.Run(() => context.Doctors.Any());)。这不是一个好习惯(看看Stephen Cleary在这个question中的答案和链接。)

这是另一种不需要您实际运行任务的方法。您可以在没有这样的任务的情况下返回任务:

return Task.FromResult(context.Doctors.Any());

这样,您可以在不触发所有任务的情况下返回值。如果您的方法中没有任务,那么这是一种更好的做法。

注意:在最新版本的Entity Framework中,您有一个AnyAsync方法甚至更好:

public async Task<bool> IsRegisteredCopy()
{
    return await context.Doctors.AnyAsync();
}

您需要使用以下内容添加:System.Data.Entity;