我最近观察到两个开发人员之间的代码审查。
提交的代码如下:
public async Task<List<Thing>> GetThings()
{
try
{
var endpoint = $"{Settings.ThingEndpoint}/things";
var response = await HttpClient.GetAsync(endpoint);
return JsonConvert.DeserializeObject<List<Thing>>(await response.Content.ReadAsStringAsync());
}
catch (Exception e)
{
Log.Logger.Error(e.ToString());
return await Task.FromException<List<Thing>>(e);
}
}
Run Code Online (Sandbox Code Playgroud)
其中收到以下评论:
绝对不需要返回 await Task.FromException>(e),这是您在处理非等待任务时所做的事情。在这种情况下,catch 将捕获任何异常 var response = await HttpClient.GetAsync(endpoint); 会扔。您应该删除它并按原样捕获异常
我不完全理解为什么在这种情况下不使用 Task.FromException,所以我有以下问题:
我有一个 .NET 4.5.2 服务通过 MassTransit 向 RabbitMq 发布消息。
以及使用这些消息的 .NET Core 2.1 服务的多个实例。
目前,.NET 核心消费者服务的竞争实例从其他实例窃取消息。
即第一个消费消息的人将其从队列中取出,其余的服务实例不会消费它。
我希望所有实例都使用相同的消息。
我怎样才能做到这一点?
发布者服务配置如下:
builder.Register(context =>
{
MessageCorrelation.UseCorrelationId<MyWrapper>(x => x.CorrelationId);
return Bus.Factory.CreateUsingRabbitMq(configurator =>
{
configurator.Host(new Uri("rabbitmq://localhost:5671"), host =>
{
host.Username(***);
host.Password(***);
});
configurator.Message<MyWrapper>(x => { x.SetEntityName("my.exchange"); });
configurator.Publish<MyWrapper>(x =>
{
x.AutoDelete = true;
x.Durable = true;
x.ExchangeType = true;
});
});
})
.As<IBusControl>()
.As<IBus>()
.SingleInstance();
Run Code Online (Sandbox Code Playgroud)
.NET Core Consumer Services 配置如下:
serviceCollection.AddScoped<MyWrapperConsumer>();
serviceCollection.AddMassTransit(serviceConfigurator =>
{
serviceConfigurator.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>
{
var host …Run Code Online (Sandbox Code Playgroud) In C# 8.0, Static Local Functions are announced
Can anyone help enlighten me as to why you would want to declare a local function as static?
The reason given in in the article:
to ensure that local function doesn't capture (reference) any variables from the enclosing scope
But:
The example code given in the article is:
int …Run Code Online (Sandbox Code Playgroud) 我需要为每个 ProductTypeName 获取前 2 个产品:
var productDetails = (from p in products
join po in productOrganisations
on p.Id equals po.ProductId
where po.OrganisationId == id
where p.ProductTypeId == (typeId > 0 ? typeId : p.ProductTypeId) //filter by type if specified
where p.IsLive
select new
{
Id = p.Id,
Name = p.Name,
SupplierName = p.Supplier.Name,
ProductTypeName = p.ProductType.Name,
ShortDescription = p.ShortDescription,
ProductTypeId = p.ProductTypeId,
DatePublished = p.DatePublished,
CurrencyId = p.CurrencyId,
})
.AsNoTracking()
.ToArray();
Run Code Online (Sandbox Code Playgroud)
目前上述声明退回我所有的产品,数百。每个产品都有一个属性 ProductTypeName 。
我需要按此 ProductTypeName 分组,然后按发布日期降序获取每个组中的前两个。
有任何想法吗?
我正在关注这个 Blazor 服务器计数器增量示例。
具体代码示例如下。
我有三个问题:
1 -单击按钮后是否通过 SignalR 调用 IncrementCount?
2 - IncrementCount 的执行是否发生在服务器上?(与在浏览器中相反)
3 -如果是通过 SignalR - 我怎样才能看到使用 Chrome 开发者工具发出的“呼叫”(请求)?我查看了网络选项卡,看不到任何活动。看截图:
代码示例:
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
Run Code Online (Sandbox Code Playgroud)