小编Mar*_*skI的帖子

在没有await关键字的情况下调用async方法究竟发生了什

我有一个Web服务器,并有定期作业合并和发送记录(许多请求日志).

Task.Run(() =>
{
    while (true)
    {
        try
        {
            MergeAndPutRecords();
        }
        catch (Exception ex)
        {
            Logger.Error(ex);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

MergeAndPutRecords函数中,有代码合并记录和异步函数返回任务发送记录.(实际上它是亚马逊Kinesis Firehose的PutRecordBatchAsync.)

如果我在没有await关键字的情况下调用该函数会发生什么?函数是否在单独的线程上运行?这里说它不是.那么什么是返回任务手段?这里说async方法没有等待关键字的意思

  1. 在当前线程上启动异步方法.忽略所有结果(包括例外).

然后同时处理我的定期作业和PutRecordBatchAsync?我知道asynchronouse和concurrent是不同的.但是没有await关键字,它们在同一个线程中.首先执行哪一个?我很困惑......

会有大量记录需要合并并实时发送.所以我认为它必须同时执行..

c# asynchronous async-await

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

在运行基于 IdentityServer 4 的产品的实例上,HTTPS 出站请求时间在 14-21 天后增加到 5 分钟

在 AWS 集群上运行基于 IdentityServer 4 的 ASP.Net Core 应用程序,14-21 天后,所有传出 HTTPS 请求需要 5 分钟或更长时间才能完成。

经过调查发现,死机WinHTTP Web Proxy Auto-Discovery Service出现以下错误:The endpoint mapper database entry could not be created.不确定这是问题还是操作系统中其他问题的副作用。

环境:

  • ELB 具有自动缩放组,其后面有两个实例,两个实例均出现问题
  • Windows 服务器 2019

笔记:

  • 它是一个自定义 AMI,但与没有遇到此情况的实例的唯一区别是产品在其上运行。
  • 发生在基于 .Net core 2.2 和 3.1 的应用程序版本上
  • 基于 IdentityServer4 v2 和 v3 的两个版本都会发生
  • 该应用程序是独立部署的
  • 该应用程序使用 Kestrel,前面没有反向代理

尝试过:

  • 启用 schannel:跟踪上设置的 schannel 日志中没有错误
  • 任何 EventViewer 日志中都没有其他值得注意的错误
  • 重启实例即可解决问题
  • 当运行curl.exe -v到机器上的HTTPS站点时,请求被卡住schannel: checking server certificate revocation
  • 实例上的时钟正常
  • 重新启动应用程序进程无法解决问题
  • HTTPClient在使用该服务的代码中禁用WinHTTP Web Proxy Auto-Discovery …

amazon-web-services kestrel-http-server asp.net-core identityserver4

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

即使 FormFlattening 属性为 false,Itextsharp 表单也会被展平

我有以下方法,该方法应该在给定坐标处的 pdf 文件上标记图像,并在图层仍然分离(即未展平)的情况下返回它,我设置了 FormFlattening 属性,但它不起作用。

经过一番实验,我发现当我调用 getPdfLayers 方法时,文件不会被展平,为什么会这样呢?

public static byte[] StampLayer(System.Drawing.Image image, int x, int y, string layername)
{
    var iImage = iTextSharp.text.Image.GetInstance(image, ImageFormat.Tiff);
    var reader = new PdfReader(_pdfFile);

    using (var ms = new MemoryStream())
    {
        using (var stamper = new PdfStamper(reader, ms))
        {
            //Don't delete otherwise the stamper flattens the layers
            var layers = stamper.GetPdfLayers();

            stamper.FormFlattening = false;

            var logoLayer = new PdfLayer(layername, stamper.Writer);
            PdfContentByte cb = stamper.GetUnderContent(1);
            cb.BeginLayer(logoLayer);

            //300dpi
            iImage.ScalePercent(24f);
            iImage.SetAbsolutePosition(x, y);
            cb.AddImage(iImage);

            cb.EndLayer();
            stamper.Close();

            return (ms.GetBuffer()); …
Run Code Online (Sandbox Code Playgroud)

c# pdf itext

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