質問者さんは去ってしまったようですので今更ながらですが、回答を書いておきます。引用の際質問のスペルミスは直しました。
await Task.Run(async()=>{
関数();
await Task.Delay(1000); // 関数実行後待ちたい←OK?
});
await の中に await を入れてよいでしょうか。
await Task.Delay(1000); の await のことだと理解しますが、その行で「関数実行後待ちたい」のであれば、よいです。と言うか、await を付与する他に適当は方法はないと思います。
別の代替案はあるでしょうか。
await Task.Delay(1000); ⇒ Thread.Sleep(3000); とすれば見かけは同じになると思いますが、非推奨だそうです。詳しくは以下の記事の「すべて非同期にする」のセクションを見てください。
非同期プログラミングのベスト プラクティス
https://docs.microsoft.com/ja-jp/archive/msdn-magazine/2013/march/async-await-best-practices-in-asynchronous-programming
async / await の説明については、自分的には以下の記事が分かりやすかったので紹介しておきます。
第2回 非同期メソッドの構文
https://atmarkit.itmedia.co.jp/fdotnet/chushin/masterasync_02/masterasync_02_01.html
記事の抜粋ですが、
"async修飾子は、修飾したメソッド内でawait演算子(後述)を利用するためのキーワードだ。asyncキーワードは単にメソッドの修飾でしかなく、これを加えたことによってコンパイル結果として何かが展開されたりすることはない"
"await演算子の意味は、「待っているタスクがまだ完了していない場合、メソッドの残りをそのタスクの『継続』として登録して呼び出し元に処理を戻し、タスクが完了したら登録しておいた継続処理を実行すること」なので注意が必要だ"