该代码如何用于带有功能的Task.FromResult <tresult>

时间:2019-02-10 14:53:30

标签: c#

我想在代码中内联使用lambda之类的函数。但是我不知道怎么写。

public Task<Product> Details(string id)
        {
            return Task.FromResult(GetProduct(id));
        }

private Product GetProduct(string id)
        {
            try
            {
                var employee = db.ProductList
                    .Include(d => d.MappingProductTagList)
                    .ThenInclude(mapping => mapping.Tag)
                    .SingleOrDefault(p => p.Id == id);


                db.Entry(employee).State = EntityState.Detached; // Änderungen werden nicht geprüft.
                return employee;
            }
            catch
            {

                throw;
            }
        }

我要使用这样的代码。但是我收到消息“因为它不是委托类型,所以无法将lambda表达式转换为类型'Product'”

public Task<Product> Details(string id)
        {
            return Task.FromResult<Product>(() => {
                Product employee = db.ProductList
                        .Include(d => d.MappingProductTagList)
                        .ThenInclude(mapping => mapping.Tag)
                        .SingleOrDefault(p => p.Id == id);


                db.Entry(employee).State = EntityState.Detached; // Änderungen werden nicht geprüft.
                return employee;
            });
        }

2 个答案:

答案 0 :(得分:1)

请尝试以下操作,尽管我不确定您要完成什么。您已经在开始时就给出了如何使用Task.FromResult的有效示例。但是您正在问如何使用lambda(我不明白为什么)。我只是假设您想将执行推迟到实际的Task中,这就是我在下面演示的内容:

public Task<Product> Details(string id)
{
    return Task.Run(() =>
    {
        Product employee = db.ProductList
                .Include(d => d.MappingProductTagList)
                .ThenInclude(mapping => mapping.Tag)
                .SingleOrDefault(p => p.Id == id);

        db.Entry(employee).State = EntityState.Detached; // Änderungen werden nicht geprüft.
        return employee;
    });
}

答案 1 :(得分:0)

docker push需要一个Task.FromResult<Product>()类型的参数,因此您不能传递lambda表达式,因此会产生编译错误。

请参阅:https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.task.fromresult?view=netframework-4.7.2