小编Sam*_*evx的帖子

C#async等待使用LINQ ForEach()

我有以下代码正确使用async/await范例.

internal static async Task AddReferencseData(ConfigurationDbContext context)
{
    foreach (var sinkName in RequiredSinkTypeList)
    {
        var sinkType = new SinkType() { Name = sinkName };
        context.SinkTypeCollection.Add(sinkType);
        await context.SaveChangesAsync().ConfigureAwait(false);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果不是使用foreach(),我想使用LINQ ForEach(),那么写这个的等效方法是什么?例如,这个给出了编译错误.

internal static async Task AddReferenceData(ConfigurationDbContext context)
{
    RequiredSinkTypeList.ForEach(
        sinkName =>
        {
            var sinkType = new SinkType() { Name = sinkName };
            context.SinkTypeCollection.Add(sinkType);
            await context.SaveChangesAsync().ConfigureAwait(false);
        });
}
Run Code Online (Sandbox Code Playgroud)

我没有编译错误的唯一代码就是这个.

internal static void AddReferenceData(ConfigurationDbContext context)
{
    RequiredSinkTypeList.ForEach(
        async sinkName =>
        {
            var sinkType = new SinkType() { Name = sinkName };
            context.SinkTypeCollection.Add(sinkType); …
Run Code Online (Sandbox Code Playgroud)

.net c# linq async-await

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

docker push error"被拒绝:请求访问资源被拒绝"

尝试将映像推送到Docker Hub上的公用存储库时,会发生此错误.我尝试过的其他注册管理机构没有任何问题.

我查看了很多网站,包括StackOverflow在内的博客,但仍然没有明确的答案.

您可以尝试按如下方式复制此问题.

本地主机上的图像

如上面的屏幕截图所示,我aspc-mvc-app在本地docker主机上有一个图像.如图所示,它有3个标签- 1.0.5,1.0.5.latestlatest.

假设我们正在尝试使用janedoeDocker Hub 的帐户名称

根据Docker.io和许多其他网站的文档,推送有3个步骤.

(1)登录

docker login "index.docker.io" -u janedoe -p <password>
Run Code Online (Sandbox Code Playgroud)

- >我觉得Login Succeeded哪个好!

(2)添加一个或多个标签

在3个标签中,让我们只标记latest.

docker tag janedoe/aspc-mvc-app:latest janedoe/aspc-mvc-app
Run Code Online (Sandbox Code Playgroud)

- >提示返回,没有错误.到现在为止还挺好.

(3)推

docker push janedoe/aspc-mvc-app
Run Code Online (Sandbox Code Playgroud)

- >这是发生错误的地方.

如下面的屏幕截图所示,初始检查似乎正常,直到您收到错误消息:拒绝请求访问资源

在此输入图像描述

在步骤(2),我尝试了许多其他格式,包括以下内容.

docker tag janedoe/aspc-mvc-app:latest janedoe/aspc-mvc-app:latest
docker tag janedoe/aspc-mvc-app janedoe/aspc-mvc-app:latest

docker tag aspc-mvc-app:latest janedoe/aspc-mvc-app
docker tag aspc-mvc-app janedoe/aspc-mvc-app:latest

docker tag 306a8fd79d88 janedoe/aspc-mvc-app
docker tag 306a8fd79d88 …
Run Code Online (Sandbox Code Playgroud)

docker dockerhub docker-registry

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

使用ConfigureAwait进行C#async/await链接(false)

基于众多书籍和博客,包括这里的优秀书籍,很明显当一个人写一个暴露助手异步方法的DLL库,即包装器方法时,通常认为内部完成实际异步方法的I/O任务的最佳实践在这样的线程池线程上(为了简洁起见,下面显示了伪代码,我将其HttpClient用作示例)

public Async Task<HttpResponseMessage> MyMethodAsync(..)
{
    ...
    var httpClient = new HttpClient(..);
    var response = await httpClient.PostAsJsonAsync(..).ConfigureAwait(false);
    ...
    return response;
}
Run Code Online (Sandbox Code Playgroud)

这里的关键是使用ConfigureAwait(false)IO任务完成发生在线程池线程而不是原始线程上下文,从而可能防止死锁.

我的问题是从来电者的角度来看.我对调用者和上面的方法调用之间存在多层方法调用的情况特别感兴趣,如下例所示.

CallerA -> Method1Async -> Method2Async -> finally the above MyMethodAsync
Run Code Online (Sandbox Code Playgroud)

是仅仅ConfigureAwait(false)使用最终方法还是应该确保Method1Async并在Method2Async内部调用其异步方法ConfigureAwait(false)?将它包含在所有这些中间方法中似乎很愚蠢,特别是如果Method1Async并且Method2Async只是最终调用的重载MyMethodAsync.有任何想法,请指教!

更新了示例 所以如果我有一个带有以下私有异步方法的库,

private async Task<string> MyPrivateMethodAsync(MyClass myClass)
{
    ...
    return await SomeObject.ReadAsStringAsync().ConfigureAwait(false);
}
Run Code Online (Sandbox Code Playgroud)

我应该确保以下公共重载方法还包括ConfigureAwait(false),如下所示?

public async Task<string> MyMethodAsync(string from)
{
        return await MyPrivateMethodAsync(new (MyClass() { From …
Run Code Online (Sandbox Code Playgroud)

.net c# task-parallel-library async-await io-completion-ports

9
推荐指数
2
解决办法
6370
查看次数

带有点表示法和双引号的Oracle 12c JSON查询问题

我有一个表"EvMetadata",其中"Metadata"列的检查约束为"IS JSON".请注意,表及其列是按设计使用DOUBLE QUOTES创建的.

以下SQL工作,我没有指定任何由Oracle完成的JSON工作.

select 
  m."Metadata"
from "EvMetadata" m
Run Code Online (Sandbox Code Playgroud)

如下所示,元数据列只显示其恰好是JSON数据的内容.

显示

但是,如果我按如下方式发出json查询,则会出错.

select 
  m."Metadata"."FileName"
from "EvMetadata" m
Run Code Online (Sandbox Code Playgroud)

我刚用点符号添加了"FileName".如您所见,"FileName"是一个有效的json字段.那么为什么会出错呢?

错误是

ORA-00904:"M"."元数据"."FileName":无效标识符00904. 00000 - "%s:无效标识符"*原因:*操作:行错误:2列:3

在使用双引号声明数据库对象的特定场景下,使用点表示法是否可能是Oracle的JSON查询支持的错误?我怀疑这可能是真的原因是以下等效查询,不使用点符号,工作.

select 
  JSON_VALUE(m."Metadata", '$.FileName')
from "EvMetadata" m
Run Code Online (Sandbox Code Playgroud)

oracle syntax json oracle12c

7
推荐指数
3
解决办法
4228
查看次数

C#.NET CORE如何获取自定义属性的值?

我有一个自定义属性类定义如下.

[AttributeUsage(AttributeTargets.Property, Inherited = false)]
internal class EncryptedAttribute : System.Attribute
{
    private bool _encrypted;
    public EncryptedAttribute(bool encrypted)
    {
        _encrypted = encrypted;
    }

    public virtual bool Encrypted
    {
        get
        {
            return _encrypted;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我将以上属性应用于另一个类,如下所示.

public class KeyVaultConfiguration
{
    [Encrypted(true)]
    public string AuthClientId { get; set; } = "";

    public string AuthClientCertThumbprint { get; set; } = "";
}
Run Code Online (Sandbox Code Playgroud)

如何在属性AuthClientId上获取Encrypted = True的值?

var config = new KeyVaultConfiguration();

// var authClientIdIsEncrypted = ??
Run Code Online (Sandbox Code Playgroud)

在.NET Framework中,这很容易.在.NET CORE中,我认为这是可能的,但我没有看到任何文档.我相信你需要使用System.Reflection但究竟如何?

c# custom-attributes .net-core

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

如何在 ASP.NET Core 应用程序中正确处理 Serilog 2.0?

根据文档,当应用程序关闭时,建议使用以下任一方式处理 Serilog

 Log.CloseAndFlush();
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一个实例变量 to .CreateLogger(),请调用它的

.Dispose();
Run Code Online (Sandbox Code Playgroud)

在 Visual Studio 中构建 ASP.NET Core 应用程序时,它会生成ProgramStartup类,这两个类都没有实现IDisposable. 是不是要加上这个接口,Program才能直接配置Serilog?

serilog asp.net-core

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

如何让Serilog实例立即记录到Seq而不需要调用它的Dispose()?

我有一个 Windows 服务,它处理长时间运行的任务,并且永远不会关闭,除非强制关闭(即计算机关闭)。我希望在 Windows 服务启动和运行的整个过程中保持同一个 Serilog 实例处于活动状态(出于性能原因)。

但是,我只在 Dispose() 调用之后看到日志,如下所示。

var logger = new LoggerConfiguration()
            .WriteTo.Seq("http://localhost:5341")
            .CreateLogger();

logger.ForContext("TestContext", new { Machine = "TSTDB2" }, true).Information("Test");

logger.Dispose();
Run Code Online (Sandbox Code Playgroud)

我不介意几秒钟的延迟,但必须等到 Serilog 实例被处理对我来说不起作用。任何解决方案将不胜感激。

seq serilog seq-logging

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

Serilog不会产生预期的json

我有以下代码.

Serilog.ILogger logger = Serilog.Log.Logger;
logger = new LoggerConfiguration()
   .WriteTo.Sink(new FileSink(@"c:\temp\mylogs.txt", new JsonFormatter(), null)).MinimumLevel.Debug() 
   .CreateLogger();
var newType = new MyType() { Game = "Poker", HasValue = false, Name = "Dave", TimeOfEntry = DateTime.Now.AddDays(-1) };
logger.Debug("This is the new type {NewType} generated at {Time}", newType, DateTime.Now);
Run Code Online (Sandbox Code Playgroud)

日志文件显示如下

{"Timestamp":"2015-02-11T00:53:51.8501574-05:00","Level":"Debug","MessageTemplate":"This is the new type {NewType} generated at {Time}","Properties":{"NewType":"ConsoleTestApp.MyType","Time":"2015-02-11T00:53:51.8491563-05:00"}}
Run Code Online (Sandbox Code Playgroud)

在日志文件输出中没有意义的部分是这样的:

{"NewType":"ConsoleTestApp.MyType", ...
Run Code Online (Sandbox Code Playgroud)

我期待这样的事情.

{"NewType": {Game = "Poker", HasValue = false, Name = "Dave", ...
Run Code Online (Sandbox Code Playgroud)

我做错什么了吗?

c# json serilog

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

在非常大的表中使用 CTE 与 WHILE 循环的 SQL 查询性能

我正在尝试根据下面的场景找出性能最佳的查询。

下表非常大,超过 500 万行。每天都会发生一些负载,尽管具体次数有所不同。每个负载由load_id(聚集索引的一部分)标识,load_datetimestamp 是适用于该负载的时间戳。每次加载大约插入 30,000 行。

CREATE TABLE [VeryLargeTable](
        [load_id]               [int]           NOT NULL, 
        [acct_cd]               [varchar](20)   NOT NULL,
        [acct_num]              [varchar](255)  NULL,
        [prod_id]               [varchar](50)   NOT NULL,
        [domestic_foreign_cd]   [varchar](3)    NOT NULL,
        [vendor_prod_id]        [varchar](15)   NULL,
        [prod_name]             [varchar](100)  NULL,
        [currency_cd]           [varchar](3)    NULL,
        [total_Qty]             [int]           NULL,
        [mkt_price]             [float]         NULL,
        [load_datetimestamp]    [datetime]      NULL,
CONSTRAINT [pk_VeryLargeTable] PRIMARY KEY CLUSTERED (       
        [load_id] ASC, 
        [acct_cd] ASC, 
        [prod_id] ASC,
        [domestic_foreign_cd] ASC )
)
Run Code Online (Sandbox Code Playgroud)

在任何一个晚上,我都想获取今天第一次加载的所有行。查询必须尽可能具有上面 DDL 给出的性能。显然,您不想在整个表上以“WHERE datediff(day,load_datetimestamp,getDate())=0”之类的内容开始。

我写了这两个查询。有一个比另一个更好吗?我知道两者返回相同的结果。您能推荐一个比这两者中任何一个更好的吗?

查询1

With 
T1 as (select
    load_id,
    load_datetimestamp
    from dbo.VeryLargeTable
    group by 
    load_id,load_datetimestamp), …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server performance

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

为什么Oracle 12c查询需要在表周围加双引号

我正在查询的数据库是Oracle 12c。数据库版本详细信息如下:

Oracle Database 12c 企业版版本 12.1.0.2.0 - 64 位生产版

PL/SQL 版本 12.1.0.2.0 - 生产

我试图消除 SQL 查询中每个视图或表都使用双引号的需要。

以下作品(来自 Oracle Sql Developer GUI)

select m."Metadata"
from "EvMetadata" m
Run Code Online (Sandbox Code Playgroud)

以下给出错误(来自 Oracle Sql Developer GUI)

select m.Metadata
from EvMetadata m
Run Code Online (Sandbox Code Playgroud)

错误是

ORA-00942: 表或视图不存在 00942. 00000 - “表或视图不存在” *原因:
*操作: 行: 2 列: 6 出错

我生成了DDL,看起来像这样

CREATE TABLE "EVP"."EvMetadata" 

("EvMetadataId" NUMBER(10,0) GENERATED ALWAYS AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE , 

"InsertDate" TIMESTAMP (6), …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle12c

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