C# 通用GDI+;二维码出现错误

C# 通用GDI+;二维码出现错误,c#,.net,multithreading,api,C#,.net,Multithreading,Api,当有很多请求传入时,我会得到几个通用的gdi+错误代码。大多数情况下,这部分没有错误 我认为错误在于这一部分 string guidString = Guid.NewGuid().ToString(); string dateNowString = DateTime.Now.ToString("ddMMyyyHHmmssfff"); var localFilePath = @"c:\temp\" + dateNowStrin

当有很多请求传入时,我会得到几个通用的gdi+错误代码。大多数情况下,这部分没有错误

我认为错误在于这一部分

            string guidString = Guid.NewGuid().ToString();
            string dateNowString = DateTime.Now.ToString("ddMMyyyHHmmssfff");
            var localFilePath = @"c:\temp\" + dateNowString + ".png";

            //Create QrCode on local
            QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.M);
            QrCode qrCode = qrEncoder.Encode(pass.Barcode);
            Renderer renderer = new Renderer(5, Brushes.Black, Brushes.White);
            renderer.CreateImageFile(qrCode.Matrix, localFilePath, ImageFormat.Png);
            /*using (MemoryStream ms = new MemoryStream())
            {
                using (FileStream stream = new FileStream(localFilePath, FileMode.Create))
                {
                    renderer.WriteToStream(qrCode.Matrix, ms, ImageFormat.Png);
                }
            }*/

            //Upload locally saved QR image to AWS S3
            string bucketName = ConfigurationManager.AppSettings["bucketName"].ToString();
            var s3Client = new S3(bucketName, guidString);
            string key = guidString + dateNowString + ConfigurationManager.AppSettings["FileFormatExtension"].ToString();
            qrCodeUrl = s3Client.UploadFile(localFilePath, key);

            //Delete QrCode image on local
            if (File.Exists(localFilePath))
            {
                File.Delete(localFilePath);
            }

            //Save QrCode Url to BoardingPass Table
            pass.QrCodeUrl = qrCodeUrl;
            data.SaveChanges();
这是由几个线程调用的(1 call=1 thread,我正在应用一个任务来并发运行这些线程,一个线程可以多次调用这部分)

这是stacktrace

   at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)     at Gma.QrCodeNet.Encoding.Windows.Controls.Renderer.CreateImageFile(BitMatrix matrix, String fileName, ImageFormat imageFormat)     at <redacted>API.Helpers.BoardingPassHelper.GenerateQRCode(BoardingPassRequest request) in <redacted>.API\Helpers\BoardingPassHelper.cs:line 972     at BCSBoardingPass.API.Controllers.API.BoardingPassController.GenerateMultiPaxBoardingPass(MBPRequest mbpRequest, Int32 requestIndex, Boolean isMbp) in <redacted>controllers\API\BoardingPassController.cs:line 615
位于API.Helpers.BoardingPassHelper.generateqrcodenet.Encoding.Windows.Controls.Renderer.CreateImageFile(位矩阵、字符串文件名、ImageFormat ImageFormat)处的System.Drawing.Image.Save(字符串文件名、ImageCodeInfo编码器、EncoderParameters EncoderParameters encoderParams)处的API.Helpers.BoardingPassHelper.GenerateQRCode(BoardingPassRequest请求)在.API\Helpers\BoardingPassHelper.cs中:在Controllers\API\BoardingPassController.cs中的BCSBoardingPass.API.BoardingPassController.GenerateMultiPaxBoardingPass(MBPRequest MBPRequest,Int32 requestIndex,Boolean isMbp)的第972行

我们在多线程环境中使用该库的V0.3版本时出现了这种随机错误。我们没有设法修复此随机行为,但我们注意到,由于我们将图像格式从PNG切换到JPEG,因此不再出现错误。

在多线程环境中,使用库的V0.3版本时,我们出现了这种随机错误。我们没有设法修复此随机行为,但我们注意到,由于我们将图像格式从PNG切换到JPEG,因此不再出现错误。

可能是两个线程试图创建相同的文件吗?尝试将文件名更改为带有运行计数器而不是日期后缀的内容以进行测试。可能是两个线程正在尝试创建相同的文件吗?尝试将文件名更改为带有运行计数器的名称,而不是日期后缀,以进行测试。