【发布时间】:2020-01-23 04:07:10
【问题描述】:
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;
}
}
我有这个类 CarAssembly 有方法 Process,它调用异步方法 AssembleFrame 然后它必须调用另一个方法来GetTyreCount 这是一个非常简单的获取计数的方法,如上所述,上面提到的 3 个选项 OptionA、OptionB、OptionC 是调用这个简单的 CPU 绑定方法的正确方法。即使我所说的选项不正确,请提供您的想法什么是正确的方法。假设它是 WebAPI 中的类执行(无 UI)
【问题讨论】:
-
为什么要GetTyreCount设置汽车上的数值?
-
您绝对应该不使用
Task.Run,除非您调用的方法运行时间很长并且会干扰代码的执行。静态与非静态无关紧要,但由于该方法不使用任何类成员,因此我可能更喜欢静态的那种性质。 -
不是 A、B 和 C 除了名称是相同的,更好的名称是“SetTireCount”,以及它不是“Async”和 Get,意味着它返回了它不返回的东西(空白)。他们都工作....但为什么有一个静态版本?包装非异步时选项 c 是错误的,所以最正确的是 B 的名称更改为“SetTireCount”