【发布时间】:2018-08-24 16:07:09
【问题描述】:
我最近一直在学习异步编程,我想我已经掌握了。异步编程很简单,只需让我们的程序进行多任务处理即可。
await 和 async 编程带来了困惑,这似乎让我更加困惑,有人可以帮助回答我的一些问题吗?
我没有看到async 关键字那么多,只是您使用一种方法让Visual Studio 知道该方法可能await 某些东西并允许它警告您。如果它有其他一些实际影响某事的特殊含义,有人可以解释一下吗?
转到await,在与朋友交谈后,我被告知我有 1 大问题,await 不会阻止当前方法,它只是执行该方法中留下的代码并执行异步操作自己的时间。
现在,我不确定这种情况发生的频率,但假设你有一些这样的代码。
Console.WriteLine("Started checking a players data.");
var player = await GetPlayerAsync();
foreach (var uPlayer in Players.Values) {
uPlayer.SendMessage("Checking another players data");
}
if (player.Username == "SomeUsername") {
ExecuteSomeOperation();
}
Console.WriteLine("Finished checking a players data.");
如您所见,我在GetPlayerAsync 上运行了一些异步代码,如果我们更深入地了解范围并且我们需要访问播放器,但它还没有返回播放器,会发生什么?
如果它没有阻塞该方法,它如何知道 player 不是 null,它是否会做一些魔术并在我们遇到这种情况时等待我们,或者我们是否只是禁止自己以这种方式编写方法自己处理。
【问题讨论】:
-
你想检查播放器是否为空?
-
如果不是呢?我猜你被搞砸了?
-
你到底想要什么?如果您想检查播放器的值,那么我假设您可以执行
If (player.Value == null)之类的操作(我不知道您的播放器具有哪些属性,但如果它具有valueproperty 它可能会起作用) -
"异步编程很简单,只是允许我们的程序进行多任务处理。" No, asynchrony and parallelism are two very different things.。异步编程是指操作立即返回,并在返回后执行一些工作,可能会在底层操作实际完成时通知调用者。它与同步做事相反。这与并行性无关。
-
async在方法上将把它变成一个状态机,在awaits 之后运行代码作为延续。如果你想使用await,它也是必需的。
标签: c# .net asynchronous async-await