Я пытаюсь реализовать сценарии NPC, используя новую функцию C # await. Это мое доказательство концепции.
В NPC.cs вы можете увидеть этот фрагмент:
public async void Run(INPC npc)
{
npc.Say("Hello!");
await npc.WaitForOk();
npc.Say("This is an example of some weird crap.");
await npc.WaitForOk();
npc.Say("Bye.");
await npc.WaitForOk();
}
В реальном примере сценарий будет реализован на языке сценариев, таком как IronPython. Несмотря на то, что в будущем он может поддерживать ключевые слова async/await, необходимость делать это для каждого вызова очень хлопотна и раздражает.
Я пробовал, чтобы другой метод был асинхронным и выполнял ожидание, а скрипт просто вызывал его, но из-за того, как работает async/await, метод скрипта (Run) просто продолжался бы без паузы/блокировки.
Есть ли способ избежать необходимости делать метод сценария асинхронным и использовать await перед каждым вызовом, сохраняя при этом функциональность, подобную сопрограмме?
Кроме того, если для этого уже доступно лучшее решение, чем использовать async/await, сохраняя при этом эффективность потоков, выделите его.
Спасибо!