小编Liz*_*izP的帖子

从同步方法调用异步方法

我看到很多关于从同步方法调用异步方法的问题,例如:How to call asynchronous method from synchronous method in C#?

我理解这些解决方案,但是,通过实验,我发现我不需要添加.Wait()orTask.Run(async () => await MyAsyncMethod())来使其同步运行。我有一个从数据库中提取信息的 get 方法。

我的代码如下,当我运行时,它会等待var task = GetItemAsync(),然后我从数据库中得到正确的结果。我发现很难相信数据库调用可以在代码继续运行之前返回,这似乎意味着它是同步运行的。我错过了什么吗?

public object GetItem()
{
     var task = GetItemAsync();
     var result = task.Result;

     return result
}
Run Code Online (Sandbox Code Playgroud)

c# asynchronous

7
推荐指数
2
解决办法
2万
查看次数

无法从 Microsoft.Extensions.Logging.Abstractions 加载类型

我有一个适用于某些计算机而不是其他计算机的解决方案。例外是这样的:

无法从程序集“Microsoft.Extensions.Logging.Abstractions,版本=3.0.0.0,Culture=neutral,PublicKeyToken=adb9793829ddae60”加载类型“Microsoft.Extensions.Logging.Abstractions.Internal.NullScope”

从诊断集输出构建中添加的信息说:

抛出异常:Services.dll 中的“System.Exception”。抛出异常:System.Private.Corelib.dll 中的“System.Exception”

我试图找出两台计算机之间的区别,但结果却不尽人意。

  • 两台工作/不工作的计算机都运行 VS2017 v15.9.17。
  • 两台计算机都安装了 .NET Framework 4.0
  • 启动项目使用 C# 7.1
  • 启动项目是 .NET Core 2.0
  • 输出说抛出错误的项目是 .NET Standard 2.0
  • 启动项目使用依赖注入创建通过 DBContexts 访问数据库的服务
  • 失败的电话是:
CustomUnit unit = await _dbContext.CustomUnit
                    .Include(x => x.Type)
                    .Include(x => x.UnitBuckets)
                    .Include(x => x.InventoryBuckets)
                    .Include(x => x.WIPBuckets)
                        .ThenInclude(y => y.Unit)
                    .SingleOrDefaultAsync(x => x.UnitId == unitId);
Run Code Online (Sandbox Code Playgroud)

工作的机器总是工作,而不工作的机器永远工作。我试过清除 nuget 缓存、删除和重新添加引用、删除和重新克隆项目到新位置都没有结果。由于所有机器都是从同一分支新提取的代码,没有修改,代码库是相同的。我一直无法找到两台机器之间的任何差异来解释为什么它可以在一台机器上运行而不是在另一台机器上运行。谁有想法?

c# reference nuget .net-core

3
推荐指数
2
解决办法
7950
查看次数

标签 统计

c# ×2

.net-core ×1

asynchronous ×1

nuget ×1

reference ×1