Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.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# 异步方法执行流,必须处理简单的CPU绑定操作 公车 { 公共int TyresCount{get;set;} 公共int稀疏重新计数{get;set;} 公共int{get;set;} 公共整数{get;set;} } 公营房屋 { 公共异步任务过程(Car) { car=等待装配异步(car); //方案A 设置轮胎计数(汽车); //或方案B SETTIRECOUNTONSTATIC(汽车); //或方案C 等待任务。运行(()=>SetTyreCountAsync(car)); car=等待装配发动机异步(car); 返回车; } 公共异步任务集合名称(Car) { car=等待httpclient.GetAsync(“GetFrame”); 返回车; } //方案A 私人静态无效设置记录(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } //方案B 公共无效设置RecountNonStatic(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } //备选案文C 公共无效设置恢复同步(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } 公共异步任务汇编引擎异步(Car) { car=等待httpclient.postAsync(“组装引擎”); 返回车; } }_C#_Webapi - Fatal编程技术网

C# 异步方法执行流,必须处理简单的CPU绑定操作 公车 { 公共int TyresCount{get;set;} 公共int稀疏重新计数{get;set;} 公共int{get;set;} 公共整数{get;set;} } 公营房屋 { 公共异步任务过程(Car) { car=等待装配异步(car); //方案A 设置轮胎计数(汽车); //或方案B SETTIRECOUNTONSTATIC(汽车); //或方案C 等待任务。运行(()=>SetTyreCountAsync(car)); car=等待装配发动机异步(car); 返回车; } 公共异步任务集合名称(Car) { car=等待httpclient.GetAsync(“GetFrame”); 返回车; } //方案A 私人静态无效设置记录(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } //方案B 公共无效设置RecountNonStatic(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } //备选案文C 公共无效设置恢复同步(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } 公共异步任务汇编引擎异步(Car) { car=等待httpclient.postAsync(“组装引擎”); 返回车; } }

C# 异步方法执行流,必须处理简单的CPU绑定操作 公车 { 公共int TyresCount{get;set;} 公共int稀疏重新计数{get;set;} 公共int{get;set;} 公共整数{get;set;} } 公营房屋 { 公共异步任务过程(Car) { car=等待装配异步(car); //方案A 设置轮胎计数(汽车); //或方案B SETTIRECOUNTONSTATIC(汽车); //或方案C 等待任务。运行(()=>SetTyreCountAsync(car)); car=等待装配发动机异步(car); 返回车; } 公共异步任务集合名称(Car) { car=等待httpclient.GetAsync(“GetFrame”); 返回车; } //方案A 私人静态无效设置记录(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } //方案B 公共无效设置RecountNonStatic(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } //备选案文C 公共无效设置恢复同步(汽车) { car.TyresCount=car.front轮胎+car.reart轮胎; car.sparetyrecontcount=1; } 公共异步任务汇编引擎异步(Car) { car=等待httpclient.postAsync(“组装引擎”); 返回车; } },c#,webapi,C#,Webapi,我有一个类CarAssembly,它有一个方法Process,调用一个异步方法assembleName,然后它必须调用另一个方法GetTyreCount,这是一个非常简单的方法来获取计数,如上所述,使用上述3个选项OptionA,OptionB,OptionC是调用这个简单的CPU绑定方法的正确方法。即使我所说的选择是不正确的,请提供你的想法什么是正确的方法。假设它是在WebAPI中执行的类(没有UI)在WebAPI上,您应该使用选项a或B。如果您不需要访问实例变量(如记录器),请使用选项a。如

我有一个类CarAssembly,它有一个方法Process,调用一个异步方法assembleName,然后它必须调用另一个方法GetTyreCount,这是一个非常简单的方法来获取计数,如上所述,使用上述3个选项OptionA,OptionB,OptionC是调用这个简单的CPU绑定方法的正确方法。即使我所说的选择是不正确的,请提供你的想法什么是正确的方法。假设它是在WebAPI中执行的类(没有UI)

在WebAPI上,您应该使用选项a或B。如果您不需要访问实例变量(如记录器),请使用选项a。如果需要,请使用选项B


作为一般规则,.

为什么GetTyreCount会在汽车上设置值?您绝对不应该使用
Task.Run
,除非您调用的方法运行时间很长并且会干扰代码的执行。静态与非静态没有多大关系,但由于该方法不使用任何类成员,我可能更喜欢这种性质的静态。不是A、B和C是相同的,只是名称不同,更好的名称是“SetTireCount”,以及它的非“Async”和Get,这意味着它返回它不返回的内容(void)。他们都工作。。。。但是为什么有一个静态版本呢?在包装非异步时,选项c是错误的,因此最正确的选项是名称更改为“SetTireCount”的B
public class Car
    {
        public int TyresCount { get; set; }
        public int SpareTyreCount { get; set; }
        public int FrontTyres { get; set; }
        public int RearTyres { get; set; }
    }

    public class CarAssembly
    {

        public async Task<Car> Process(Car car)
        {
            car = await AssembleFrameAsync(car);
            //Option A
            SetTyreCount(car);
            //or Option B
            SetTireCountNonStatic(car);
            //or Option C
            await Task.Run(() => SetTyreCountAsync(car));
            car = await AssembleEngineAsync(car);
            return car;
        }

        public async Task<Car> AssembleFrame(Car car)
        {
            car = await httpclient.GetAsync("GetFrame");
            return car;
        }

        //Option A
        private static void SetTyreCount(Car car)
        {
            car.TyresCount = car.FrontTyres + car.RearTyres;
            car.SpareTyreCount = 1;
        }

        //Option B
        public void SetTyreCountNonStatic(Car car)
        {
            car.TyresCount = car.FrontTyres + car.RearTyres;
            car.SpareTyreCount = 1;
        }

        //Option C
        public void SetTyreCountAsync(Car car)
        {
            car.TyresCount = car.FrontTyres + car.RearTyres;
            car.SpareTyreCount = 1;
        }
        public async Task<Car> AssembleEngineAsync(Car car)
        {
            car = await httpclient.postAsync("assembleEngine");
            return car;
        }
    }