小编Roe*_*t M的帖子

await Task.WhenAll vs ..select(async .. => await)

只是一个简单的问题.我们在这里有一些误解.

我们有:

var tasks = files.Select(async fileName => await IngestFileAsync(container, fileName));
var results = await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

我说第一行仍然是并发的,但我的同事说不然.此外,他说第二个await没有意义,因为所有行动都已经完成.

这个代码是相同的:

var tasks = files.Select(fileName => IngestFileAsync(container, fileName));
var results = await Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

如:

var tasks = files.Select(async fileName => await IngestFileAsync(container, fileName));
var results = Task.WhenAll(tasks);
Run Code Online (Sandbox Code Playgroud)

有人可以为此发光吗?

干杯.

补充:oke,所以它会并发运行.

但是,有人可以添加一些额外的信息这些代码片段之间的差异:https : //dotnetfiddle.net/lzv2B7 https://dotnetfiddle.net/dMusus

(注意第16行,asyncawait).这两个之间有什么区别吗?我期望的是,使用异步和等待它将直接启动,并且没有,它将在它开始时启动Await Task.WhenAll(tasks);

添加清晰度 - 这是我的代码 - :

   private async Task<Result> IngestFilesAsync(ICloudBlobContainer container, IEnumerable<string> files)
    {
        _logger.LogDebug("Start IngestFilesAsync");

        var tasks …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous

7
推荐指数
1
解决办法
961
查看次数

在异步方法中消除异步并等待

一个简短的问题;阅读本文:http : //blog.stephencleary.com/2016/12/eliding-async-await.html

它通常告诉我,请使用async / await。已经准备好了。但是,他也说代理任务时不必使用异步部分。

// Simple passthrough to next layer: elide.
Task<string> PassthroughAsync(int x) => _service.DoSomethingPrettyAsync(x);

// Simple overloads for a method: elide.
async Task<string> DoSomethingPrettyAsync(CancellationToken cancellationToken)
{
    ... // Core implementation, using await.
}
Run Code Online (Sandbox Code Playgroud)

为什么在通过时不应该使用async / await?难道不是那么方便,这是否有意义?

有任何想法吗?

c# asynchronous async-await

5
推荐指数
1
解决办法
488
查看次数

LINQ Min()和Max()优化

我在做正确的方面遇到了一些麻烦.

我需要为列表中的列表中的列表选择最小值和最大值

有没有想过如何创建优化类型?

var range = allFilteredCars
            .SelectMany(car => car.LeasingPlans
                .SelectMany(plan => plan.Durations)
                .Select(a => a.MonthlyPrice))
            .ToList();

        var min = range.Min();
        var max = range.Max();
Run Code Online (Sandbox Code Playgroud)

最后Min()Max()感觉不对.

有什么想法吗?

c# linq

4
推荐指数
1
解决办法
194
查看次数

SignalR 消息从客户端到服务器

我有一个在 azure 中运行的 Web api,以及在本地本地运行的 Windows 服务。这些“客户端”通过 Web API 登录 Hub。当 api 向所有客户端发出命令时,一切都会受到好评。这里没有问题。但是,是否可以将信号从客户端的同一个 websocket 发送到服务器,即从 Windows 服务发送到 Web api?现在我的服务调用 Web api 上的控制器,但这感觉是多余的,因为已经有一个可用的 Websocket,对吧?

我对 signalR 有点陌生,所以任何帮助将不胜感激。

谢谢!

c# signalr asp.net-web-api2 asp.net-core

3
推荐指数
1
解决办法
1万
查看次数

异步方法中同步代码的首选方式

我有一个简单的问题,但我认为有多个答案,但是以下内容是否有好/坏做法?

我正在为给定的接口方法实现:

Task<Model> GetDataAsync(CancellationToken token);
Run Code Online (Sandbox Code Playgroud)

所以在我的实现中,我得到以下签名:

public async Task<Model> GetDataAsync(CancellationToken token)
Run Code Online (Sandbox Code Playgroud)

但是,此实现缺少任何异步调用;只是一个常规:return x.firstOrDefault...

所以我遇到下一个问题;这里需要一些建议;我应该执行一个await Task.Run(...);操作,以便我仍然可以实现该给定的接口(我需要btw),还是有更好的方法?还有什么好处。

c# asynchronous synchronous

3
推荐指数
1
解决办法
258
查看次数

在fluentassertion上调用异步任务

可能是一个简单的,但不能让它工作;

我已经将方法上的签名改为Task

在我的单元测试中,我使用流畅的断言.

但不能让这个工作:

        _catalogVehicleMapper
            .Invoking(m => m.MapToCatalogVehiclesAsync(searchResult, filtersInfo, request, default(CancellationToken)))
            .Should().Throw<ArgumentException>()
            .WithMessage("One of passed arguments has null value in mapping path and can not be mapped");
Run Code Online (Sandbox Code Playgroud)

MapToCatalogVehiclesAsync是异步方法,但我需要等待它,但等待和异步调用,似乎没有做..有人..?

c# fluent-assertions

2
推荐指数
1
解决办法
773
查看次数

带有 IdentityDbContext 和 hasData 种子的 EFcore 创建 IdentityRole

我有点眼花缭乱;我正在使用 dotnet core (2.1) EF 进行迁移。当我仅根据上下文创建第一个迁移时,实际上看起来一切正常。

所以我有一个类似的上下文:

public class DataContext : IdentityDbContext<User, IdentityRole<Guid>, Guid>
{

    public virtual DbSet<Country> Countries { get; set; }
    public virtual DbSet<CountryUser> CountryUsers { get; set; }
    //..more stuff

    public DataContext(DbContextOptions options) : base(options)
    { }
}
Run Code Online (Sandbox Code Playgroud)

所以在创建迁移后它想添加:

migrationBuilder.CreateTable(
            name: "AspNetRoles",
            columns: table => new
            {
                Id = table.Column<Guid>(nullable: false),
                Name = table.Column<string>(maxLength: 256, nullable:
                //etc. etc. Removed rest of migrations.
Run Code Online (Sandbox Code Playgroud)

我以为一切都很好。

然后我开始关注下面的文章; 如何在 EF Core 2.1.0 中为管理员用户做种?

在设置HasData和播种数据库后,创建了一个新的迁移,它创建了一个新的迁移,它想要删除AspNetRoles表并创建为新表IdentityRole。我刚刚删除了数据库并尝试再次执行此操作,现在它只想在播种时插入数据。但我无法弄清楚我改变了什么,甚至更好,为什么它想要删除并创建不同的表。

有人可以解释一下它何时要创建 …

c# entity-framework-core .net-core entity-framework-migrations

2
推荐指数
1
解决办法
1048
查看次数

task.delay执行后会执行无限代码吗?

只是一个简单的问题.我们在这里有一些误解.

为简单起见,删除了一些代码:

public async Task ConsumeAsync<T>(CancellationToken cancellationToken)
{
 _logger.LogInformation("consume async");

 await Task.Delay(Timeout.Inifite, cancellationToken);

      _logger.LogInformation("cancelled");
}
Run Code Online (Sandbox Code Playgroud)

请求取消时是否应记录最后一个日志?

c# multithreading

1
推荐指数
1
解决办法
180
查看次数