昨天,我学习了有关C#多任务处理的基础知识。虽然我在技术上似乎理解它是如何工作的,但我不知道它为什么会这样做。请记住,我对这个主题有了新的认识,这可能是我明白错误的一个标志。例如,你可以写:
public async Task SomeEventHandler()
{ if(foo) return await SomeMethod("a");
else return await SomeMethod("b");
}
async Task<int> SomeMethod(string whatever)
{ string bar = await SomeInput();
return bar + " " + whatever;
}
我在这里看到的是为什么需要async和await关键字?为什么不能写一个人:
public void SomeEventHandler()
{ if(foo) return SomeMethod("a");
else return SomeMethod("b");
}
int SomeMethod(string whatever)
{ string bar = SomeInput();
return bar + " " + whatever;
}
输入法实现类似于:
public string SomeInput()
{ while(!InputObject.stuffIncoming)
{ CurrentTheard.DoSomethingElse();
}
return InputObject.Next();
}
有人可以解释为什么那不起作用,或者会以不合需要的方式工作?编辑:根据答案,似乎由于某种原因,等待的方法不能像常规方法那样调用,反之亦然。但是是什么导致了这个至少在D中你可以为同一个函数调用或生成一个theard。
答案 0 :(得分:0)
async和await背后的理念是提供一种简单的方法来实现&#34;并行执行回调&#34;做法。每当使用关键字await
时,下一行代码的执行将被延迟,直到当前行完成(就像在正常执行中一样)但当前Thread
是没有阻止。这意味着在幕后发生了以下情况:
await
Thread
Thread
继续执行
好处是,您的代码仍然易于阅读。您不必为Threads
和回调