Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么当我';我在异步方法中使用它?_C#_Entity Framework_Asynchronous_Async Await_Entity Framework 6 - Fatal编程技术网

C# 为什么当我';我在异步方法中使用它?

C# 为什么当我';我在异步方法中使用它?,c#,entity-framework,asynchronous,async-await,entity-framework-6,C#,Entity Framework,Asynchronous,Async Await,Entity Framework 6,我尝试通过异步将代码转换为,以获得更高的性能。我的代码需要从数据库中获取项目,并使用相同的项目启动4个任务。在下面的示例中,我正在打印属性Offre.TypeOffre.Name。但是异步版本的问题是导航属性TypeOffre为空,我不知道为什么。同样的代码在非异步版本中运行良好 TypeOffre对象是从EntityFramework延迟加载的。第一个访问导航属性的用户将向数据库发送sql查询 转换前的版本 public void AnalyseOffre() { var offres=c

我尝试通过异步将代码转换为,以获得更高的性能。我的代码需要从数据库中获取项目,并使用相同的项目启动4个任务。在下面的示例中,我正在打印属性Offre.TypeOffre.Name。但是异步版本的问题是导航属性TypeOffre为空,我不知道为什么。同样的代码在非异步版本中运行良好

  • TypeOffre对象是从EntityFramework延迟加载的。第一个访问导航属性的用户将向数据库发送sql查询
转换前的版本
public void AnalyseOffre()
{
var offres=context.offres.ToList();
var firstOffre=offres.First();

对于(var i=1;i您尝试访问的对象可能不是线程安全的。看起来像是
offre。TypeOffre
access让您绊倒了。正如@YacoubMassad提到的,几乎可以肯定这个属性不是线程安全的。在启动
任务之前,您必须找到一种方法来预加载它关于使用延迟加载和异步方法,但我没有发现任何东西。似乎没有人在谈论这种问题。除了说你有一个
async
方法没有任何
await
之外,还有其他关于代码的警告吗?@PauloMorgado只有“你有一个没有任何await的异步方法”
public void AnalyseOffre()
{
    var offres = context.Offres.ToList();
    var firstOffre = offres.First();

    for (var i = 1; i <= 4; i++)
    {
        DoSomething(firstOffre);
    }
}

private void DoSomething(Offre offre)
{
    var value = offre.TypeOffre?.Name ?? "null";

    Debug.WriteLine(string.Format("value = {0}", value));
}
public async Task AnalyseOffre()
{
    var offres = await context.Offres.ToListAsync();
    var firstOffre = offres.First();

    var tasks = new List<Task>();

    for (var i = 1; i <= 4; i++)
    {
        tasks.Add(Task.Run(() => DoSomething(firstOffre)));
    }

    await Task.WhenAll(tasks);
}

private async Task DoSomething(Offre offre)
{
    var value = offre.TypeOffre?.Name ?? "null";

    Debug.WriteLine(string.Format("value = {0}", value));
}