1

C#の新機能を使用してNPCスクリプトを実装しようとしてい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、呼び出しごとに/キーワードをサポートする必要があるのは、非常に面倒で面倒です。

別のメソッドを非同期にしてawaitを実行し、スクリプトでそれを呼び出すようにしましたが、async/のawait動作方法により、スクリプトメソッド(Run)は一時停止/ブロックせずに続行します。

awaitコルーチンのような機能を維持しながら、スクリプトメソッドを非同期にしたり、各呼び出しの前で使用したりする必要を回避する方法はありますか?

また、スレッド効率を維持しながらasync/を使用するよりも、これに対してすでに利用可能なより良い解決策がある場合は、それを強調してください。await

ありがとう!

4

2 に答える 2

1

asyncこれは/の非常に興味深い使い方ですawait

私は、Web 上の多くの構文関連の質問をブログ投稿の 1 つにまとめました。要するに、 と の両方が必要な理由には十分な理由がasyncありawaitます。

NPC に状態を追加する場合は、オブザーバー ベースのアプローチ ( Rx ) の使用を検討してください。このアプローチは、複雑な相互作用が可能であり、異なる NPC の並列実行も可能にする可能性があります。

スレッドプール タスクで NPC をパターン化することもできます。これは非常に効率的です。NPC がブロックされると、CPU が他のタスクに使用できるようになります。

于 2011-12-29T18:52:03.850 に答える