Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 等待任务<>;。完成后进行冷冻_C#_Async Await - Fatal编程技术网

C# 等待任务<>;。完成后进行冷冻

C# 等待任务<>;。完成后进行冷冻,c#,async-await,C#,Async Await,我正在运行一个等待任务。在异步方法中运行(()=>。 等待中的代码将运行到竞争对手,但不会返回。 等待后的下一行永远不会被调用。 有人有什么意见吗 如何调用异步方法 var task1=ConvertToMagickImageAsync(tpFileInfo、fileInfo、density、inputModel.Quality); task1.等待(); 异步方法 受保护的虚拟异步任务转换为GickImageAsync( 元组tpFileInfo ,元组文件信息 ,元组密度 ,内部质量 )

我正在运行一个
等待任务<>。在
异步
方法中运行(()=>

等待中的代码将运行到竞争对手,但不会返回。
等待后的下一行永远不会被调用。
有人有什么意见吗

如何调用异步方法

var task1=ConvertToMagickImageAsync(tpFileInfo、fileInfo、density、inputModel.Quality);
task1.等待();
异步方法

受保护的虚拟异步任务转换为GickImageAsync(
元组tpFileInfo
,元组文件信息
,元组密度
,内部质量
)
{
字符串错误;
var outputModel=新的XPubMagickImageOutputModel
{
ResultContent=newsorteddictionary()
};
MagickFormat extension=fileInfo.Item3.FileExtension开关
{
“png”=>MagickFormat.png,
“jpg”=>MagickFormat.jpg,
“jpeg”=>MagickFormat.jpeg,
“bmp”=>MagickFormat.bmp,
_=>MagickFormat.Jpg,
};
var magickSettings=new MagickReadSettings();
如果(density.Item1>0)
magickSettings.Density=新密度(Density.Item1);
其他的
magickSettings.Density=新密度(Density.Item2,Density.Item3);
var ret=等待任务。运行(()=>
{
尝试
{
使用(var images=new MagickImageCollection())
{
var-page=0;
image.Read(tpFileInfo.Item1,magickSettings);
////如果(images.Count>0&&images[0].Format==MagickFormat.Pdf)
如果(images.Count>0)
{
var sb=新的StringBuilder(tpFileInfo.Item2);
sb.Append(@“\”).Append(fileInfo.Item1.FileName);
var sb1=新的StringBuilder(tpFileInfo.Item3);
sb1.Append(“.”).Append(扩展名.ToString().ToLower());
foreach(图像中的var图像)
{
图像质量=质量;
image.Format=扩展名;
outputModel.ResultContent[页面]=新的XPubMagickImageNameModel
{
MagickImage=新的MagickImage(图像),
ImageName=$“{sb}{page}{sb1}”
};
page++;
//outputModels.Add(outputModel);
}//end foreach(图像中的var图像)
}//如果(images.Count>0&&images[0].Format==MagickFormat.Pdf)结束
}
error=String.Empty;
outputModel.Result=XPubMagickOperationResultEnum.Success;
}
捕获(例外情况除外)
{
错误=$“异常:{ex.Message}”;
outputModel.Result=XPubMagickOperationResultEnum.ErrorMagickReadFailure;
}
返回输出模型;
});
INTA=1;
//}//结束使用(var images=new MagickImageCollection())
返回ret;
}

您实际上不需要在方法中等待。 只需返回任务并在任务外部等待。Wait()

方法将不再是异步的

protected virtual Task<IXPubMagickImageOutputModel> ConvertToMagickImageAsync(
   Tuple<string, string, string> tpFileInfo
    , Tuple<IXPubMagickFileModel, IXPubMagickFileModel, IXPubMagickFileModel> fileInfo
    , Tuple<double, double, double> density, int quality)
{
    string error;
    var outputModel = new XPubMagickImageOutputModel
    {
        ResultContent = new SortedDictionary<int, IXPubMagickImageNameModel>()
    };

    MagickFormat extension = fileInfo.Item3.FileExtension switch
    {
        "png" => MagickFormat.Png,
        "jpg" => MagickFormat.Jpg,
        "jpeg" => MagickFormat.Jpeg,
        "bmp" => MagickFormat.Bmp,
        _ => MagickFormat.Jpg,
    };

    var magickSettings = new MagickReadSettings();
    if (density.Item1 > 0)
        magickSettings.Density = new Density(density.Item1);
    else
        magickSettings.Density = new Density(density.Item2, density.Item3);
  return Task<IXPubMagickImageOutputModel>.Run(() =>
    {
        try
        {
            using (var images = new MagickImageCollection())
            {
                var page = 0;
                images.Read(tpFileInfo.Item1, magickSettings);
                ////if (images.Count > 0 && images[0].Format == MagickFormat.Pdf)
                if (images.Count > 0)
                {
                    var sb = new StringBuilder(tpFileInfo.Item2);
                    sb.Append(@"\").Append(fileInfo.Item1.FileName);

                    var sb1 = new StringBuilder(tpFileInfo.Item3);
                    sb1.Append(".").Append(extension.ToString().ToLower());

                    foreach (var image in images)
                    {
                        image.Quality = quality;
                        image.Format = extension;
                        outputModel.ResultContent[page] = new XPubMagickImageNameModel
                        {
                            MagickImage = new MagickImage(image),
                            ImageName = $"{sb}_{page}_{sb1}"
                        };
                        page++;

                        //outputModels.Add(outputModel);
                    }// end foreach (var image in images)
                }  // end if (images.Count > 0 && images[0].Format == MagickFormat.Pdf)
            }

            error = String.Empty;
            outputModel.Result = XPubMagickOperationResultEnum.Success;

        }
        catch (Exception ex)
        {
            error = $"Exception: {ex.Message}";
            outputModel.Result = XPubMagickOperationResultEnum.ErrorMagickReadFailure;
        }
        return outputModel;
    });
}
受保护的虚拟任务转换为GickImageAsync(
元组tpFileInfo
,元组文件信息
,元组密度,整数质量)
{
字符串错误;
var outputModel=新的XPubMagickImageOutputModel
{
ResultContent=newsorteddictionary()
};
MagickFormat extension=fileInfo.Item3.FileExtension开关
{
“png”=>MagickFormat.png,
“jpg”=>MagickFormat.jpg,
“jpeg”=>MagickFormat.jpeg,
“bmp”=>MagickFormat.bmp,
_=>MagickFormat.Jpg,
};
var magickSettings=new MagickReadSettings();
如果(density.Item1>0)
magickSettings.Density=新密度(Density.Item1);
其他的
magickSettings.Density=新密度(Density.Item2,Density.Item3);
返回任务。运行(()=>
{
尝试
{
使用(var images=new MagickImageCollection())
{
var-page=0;
image.Read(tpFileInfo.Item1,magickSettings);
////如果(images.Count>0&&images[0].Format==MagickFormat.Pdf)
如果(images.Count>0)
{
var sb=新的StringBuilder(tpFileInfo.Item2);
sb.Append(@“\”).Append(fileInfo.Item1.FileName);
var sb1=新的StringBuilder(tpFileInfo.Item3);
sb1.Append(“.”).Append(扩展名.ToString().ToLower());
foreach(图像中的var图像)
{
图像质量=质量;
image.Format=扩展名;
outputModel.ResultContent[页面]=新的XPubMagickImageNameModel
{
MagickImage=新的MagickImage(图像),
ImageName=$“{sb}{page}{sb1}”
};
page++;
//outputModels.Add(outputModel);
}//end foreach(图像中的var图像)
}//如果(images.Count>0&&images[0].Format==MagickFormat.Pdf)结束
}
error=String.Empty;
outputModel.Result=XPubMagickOperationResultEnum.Success;
}
捕获(例外情况除外)
{
错误=$“异常:{ex.Message}”;
outputModel.Result=XPubMagickOperationResultEnum.ErrorMagickReadFailure;
}
返回输出模型;
});
}

这个问题需要代码格式化,这可能是不需要的。如果只是用来避免死锁(有适当的方法可以避免死锁),这也是一种纯粹的黑客行为。上述问题的公认答案是“异步/等待版本在非默认同步上下文中更容易死锁。”并建议“将其更改为非异步版本,它不会死锁”
protected virtual Task<IXPubMagickImageOutputModel> ConvertToMagickImageAsync(
   Tuple<string, string, string> tpFileInfo
    , Tuple<IXPubMagickFileModel, IXPubMagickFileModel, IXPubMagickFileModel> fileInfo
    , Tuple<double, double, double> density, int quality)
{
    string error;
    var outputModel = new XPubMagickImageOutputModel
    {
        ResultContent = new SortedDictionary<int, IXPubMagickImageNameModel>()
    };

    MagickFormat extension = fileInfo.Item3.FileExtension switch
    {
        "png" => MagickFormat.Png,
        "jpg" => MagickFormat.Jpg,
        "jpeg" => MagickFormat.Jpeg,
        "bmp" => MagickFormat.Bmp,
        _ => MagickFormat.Jpg,
    };

    var magickSettings = new MagickReadSettings();
    if (density.Item1 > 0)
        magickSettings.Density = new Density(density.Item1);
    else
        magickSettings.Density = new Density(density.Item2, density.Item3);
  return Task<IXPubMagickImageOutputModel>.Run(() =>
    {
        try
        {
            using (var images = new MagickImageCollection())
            {
                var page = 0;
                images.Read(tpFileInfo.Item1, magickSettings);
                ////if (images.Count > 0 && images[0].Format == MagickFormat.Pdf)
                if (images.Count > 0)
                {
                    var sb = new StringBuilder(tpFileInfo.Item2);
                    sb.Append(@"\").Append(fileInfo.Item1.FileName);

                    var sb1 = new StringBuilder(tpFileInfo.Item3);
                    sb1.Append(".").Append(extension.ToString().ToLower());

                    foreach (var image in images)
                    {
                        image.Quality = quality;
                        image.Format = extension;
                        outputModel.ResultContent[page] = new XPubMagickImageNameModel
                        {
                            MagickImage = new MagickImage(image),
                            ImageName = $"{sb}_{page}_{sb1}"
                        };
                        page++;

                        //outputModels.Add(outputModel);
                    }// end foreach (var image in images)
                }  // end if (images.Count > 0 && images[0].Format == MagickFormat.Pdf)
            }

            error = String.Empty;
            outputModel.Result = XPubMagickOperationResultEnum.Success;

        }
        catch (Exception ex)
        {
            error = $"Exception: {ex.Message}";
            outputModel.Result = XPubMagickOperationResultEnum.ErrorMagickReadFailure;
        }
        return outputModel;
    });
}