gpt4 book ai didi

c# - 异步和快速路径优化

转载 作者:行者123 更新时间:2023-11-30 14:29:48 25 4
gpt4 key购买 nike

我正在对一个 OWIN 项目进行一些重构,我遇到了一些关于c# 快速路径优化。

所以我阅读了有关预计算任务的最佳实践,是否使方法异步以及类似的东西。

更准确地说,关于快速路径优化:

基于任务的异步模式最佳实践(快速路径 p9)http://www.microsoft.com/en-us/download/details.aspx?id=19957

与迭代器相同的指导,这对我来说更容易理解,因为我是 TAP 的新手 http://social.msdn.microsoft.com/Forums/en-US/d9146792-1b9a-4807-a42e-29107c281cc4/can-awaiting-taskfromresult-introduce-concurrency?forum=async

这是我遇到的代码:

public class CustomMiddleware2 : OwinMiddleware
{
public override async Task Invoke(IOwinContext context)
{
await InvokeInternal(context);
}

private Task InvokeInternal(IOwinContext context)
{
if (Wacko.WhatDOuKnow)
{
context.Response.Redirect("/awesomeurl");

//fast path
return Task.FromResult<object>(null);
}
return Next.Invoke(context);
}

public CustomMiddleware2(OwinMiddleware next)
: base(next)
{

}

}

这是我实际打算做的替换:

public class BetterOrNotMiddleware : OwinMiddleware
{
public override Task Invoke(IOwinContext context)
{
if (Wacko.WhatDOuKnow)
{
context.Response.Redirect("/awesomeurl");

//fast path
return Task.FromResult<object>(null);

}
else
return InvokeInternal(context);
}

private async Task InvokeInternal(IOwinContext context)
{
await Next.Invoke(context);
}

public BetterOrNotMiddleware(OwinMiddleware next)
: base(next)
{

}

}

事实是,并没有太大的区别。我不确定 BetterOrNotMiddleware 类是否更优化或更合适?我觉得等待 Next.Invoke 调用更合适,并且代码可能更容易理解,因为它与迭代器的异常处理模式相同(上面的链接)

我可能遗漏了一些有关异步状态机或调用堆栈的信息,这些信息将验证第二种方法,但我对异步还太陌生,无法理解它。

但如果这一切只是一个微优化,我不确定我是否愿意费心更改应用程序中的所有中间件。好吧,我还是可以

最佳答案

这些几乎完全相同。这两个选项之间没有真正的区别,只是不必进行第二次方法调用(无论如何都可以由编译器优化)。

你可以只用一种方法做所有事情:

public class BetterOrNotMiddleware : OwinMiddleware
{
private static readonly Task CompletedTask = Task.FromResult<object>(null);
public override Task Invoke(IOwinContext context)
{
if (Wacko.WhatDOuKnow)
{
context.Response.Redirect("/awesomeurl");
// fast path
return CompletedTask;
}
else
{
return Next.Invoke(context);
}
}
// ...
}

编辑:实际上没有理由每次都创建一个新任务,所以我改用静态完成的任务。

关于c# - 异步和快速路径优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25036071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com