小编Fil*_* DO的帖子

如何在不运行异步的情况下返回Task <mytype>的类型

在我的数据访问层中,我正在尝试创建返回类型为Task的方法.

我无法从实体框架中获取返回类型 Task<List<MYtype>>

   public static Task<List<ILeaf>> GetLeafs(int doorID)
    {
        using (var db = new StorefrontSystemEntities())
        {
            return db.proc_GetDoorLeafs(doorID).ToList<ILeaf>();
        };
    }
Run Code Online (Sandbox Code Playgroud)

使这种运行正确的唯一方法是格式化代码,如下所示:

 public async static Task<List<ILeaf>> GetLeafs(int doorID)
    {
        return await Task.Run(() =>
            {
                using (var db = new StorefrontSystemEntities())
                {
                    return db.proc_GetDoorLeafs(doorID).ToList<ILeaf>();
                };
            });
    }
Run Code Online (Sandbox Code Playgroud)

我问的原因是因为我想提供运行异步的选项,还是我没有正确理解这个?如果我可以返回一个Task然后在调用端我可以给出选项等待我想要运行异步,但如果我想同步运行我只是正常调用该方法.

如果我正在返回一个任务,我是否总是必须在方法签名中包含async关键字?

我是否以错误的方式思考这个问题?如果我有一个返回类型的任务,那么该方法可以选择被称为异步或同步?

但是,如果我在方法签名中有async和Task,那么该方法无论如何都会运行异步?

谢谢!

c# asynchronous entity-framework async-await

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

如何使用.ContinueWith调用异步任务

我正在用几个位图构建一个Bitmap.我所做的是调用多个返回Task的方法.

我遇到的问题是死锁,因为我试图通过.Result从.ContinueWith()中的异步方法中检索值,这不起作用,因为它将异步方法转换为同步方法,这导致我陷入僵局.

我的问题是如何调用.ContinueWith中的异步方法,以及实现这种方法的正确方法是什么?

我需要删除.Result并正确调用异步方法任务.什么是正确的方法?

这是我的代码.

 public async static Task<Bitmap> RollUpDrawingsImage(IElevation elevation)
{
    int height = 0, width = 800;
    Bitmap completeDrawings = null;

    using (Bitmap elevationDoor = await ShopDrawing.Merger.MergeElevationAndDoor(elevation, RotateFlipType.Rotate90FlipNone))
    {
        using (Bitmap partsList = await MaterialsList.Manager.GetMaterialList(elevation).ContinueWith(async (ml) => await ml.Result.GetDrawing()).Result)
        {
            using (Bitmap optimized = await Optimization.Manager.GetOptimizedParts(elevation).ContinueWith(async (op) => await op.Result.GetDrawing()).Result)
            {
                using (Bitmap cutSheet = await CutSheet.Manager.GetCutSheet(elevation).ContinueWith(async (cs) => await cs.Result.GetDrawing()).Result)
                {
                    height = (elevationDoor.Height + optimized.Height + cutSheet.Height + partsList.Height);
                    completeDrawings = new Bitmap(width, height + 40); …
Run Code Online (Sandbox Code Playgroud)

c# bitmap task-parallel-library async-await .net-4.5

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

使位图透明是一个较小的图像,以字节为单位

在构建位图并共同构建一些位图并将它们组合到一个位图中时,它对.MakeTransparent()有帮助.

或者,在我将Bitmap发送到请求客户端之前,如果我.MakeTransparent()它会变小吗?不是宽度或高度,以字节为单位购买?

换句话说,.MakeTransparent()会优化Bitmap,如果不是,有人会在通过互联网通过网络发送到请求客户端之前获得有关如何优化Bitmap的任何建议吗?

有问题的代码是 sheet.MakeTransparent()

 internal static Task<Bitmap> GetDoorSecheduleSheetAsync(ShopDrawing.DoorSchedules schedules, RotateFlipType rotate, byte schedulesPerSheet, byte currentI)
{
    return Task.Run(() =>
        {
            var sheet = new Bitmap(DrawingOptions.PAGE_HEIGHT_SIZE, DrawingOptions.PAGE_WIDTH_SIZE);
            sheet.SetResolution(150, 150);
            byte scheduleCnt = 0;
            float prevWidth = 0;

            using (Graphics dc = Graphics.FromImage(sheet))
            {
               dc.Clear(Color.White);

                using (Pen pen = new Pen(Color.FromArgb(80, Color.Black), 4))
                {
                    for (; currentI < schedules.Count(); currentI++)
                    {
                        if (scheduleCnt > 0)
                        {
                            dc.DrawLine(pen, prevWidth, 380/*need constant for start height*/, prevWidth, sheet.Height);
                        };

                        using (var doorSchedule = schedules[currentI].Door) …
Run Code Online (Sandbox Code Playgroud)

c# graphics optimization bitmap

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

如何使用CASE那么SQL

我正在尝试根据产品的高度设置返回结果.如果产品大于86我想要将Transom和结果集一起返回,如果它小于我返回No Transom.

我正在尝试使用下面的CASE WHEN来评估结果,但我的实现是不正确的.

    SELECT c.ID, 
        (p.Number +'|'+ pr.[Profile] +'|'+ SUBSTRING(CAST((p.Width - (pr.Siteline * 2))AS VARCHAR(9)),0,3)  
        + 'x84' +'|Pivot:'+e.PivotType+'|Hinge:'+e.Hinged +'|Swing:'+e.Swing) as [Name],
        ('Header:'+ CAST(pr.Siteline as VARCHAR(7))+'|Jamb:'+ CAST(pr.Siteline as VARCHAR(7)))as[Sitelines],

       CASE p.Height 
            WHEN > 86 THEN 'Transom'
            ELSE 'No Transom'

FROM            Generic.Part           p WITH(NOLOCK)                          JOIN
                Generic.Profiles      pr WITH(NOLOCK) ON p.ProfileID = pr.ID   JOIN
                Generic.ComponentPart cp WITH(NOLOCK) ON cp.PartID   = p.ID    JOIN
                Generic.Component      c WITH(NOLOCK) ON cp.ComponentID = c.ID JOIN
                Generic.ComponentType ct WITH(NOLOCK) ON ct.ID = c.ComponentTypeID JOIN
                Generic.FramingSystem fs WITH(NOLOCK) ON …
Run Code Online (Sandbox Code Playgroud)

sql t-sql

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

如何在MVC中拆分字符串并构建ul

我需要拆分逗号分隔的字符串并构建一个<ul>.

我似乎找不到最佳点.

这是我的代码:

  <ul>
            @{
                string[] ps = Model.ProductsServices.Split(',');

                for (byte i = 0; i < ps.Length; i++)
                {
                    <li>ps[i]</li>
                }
            }
        </ul>
Run Code Online (Sandbox Code Playgroud)

以下是上述代码的结果.

如何在MVC中构建列表项ul

c# html5 html-lists asp.net-mvc-4

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

如何递归地反转字符串

前几天我正在接受采访,并被要求编写一种递归反转字符串的方法.

我开始编写一种调用自身并卡住的方法.

以下是我的问题,在JavaScript中递归反转字符串"Obama".

这是我有多远.

function reverseString(strToReverse)
{

         reverseString(strToReverse);

};
Run Code Online (Sandbox Code Playgroud)

并且卡住了,他们说i循环没有.

有人有任何想法吗?

javascript recursion

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