[RelayCommand]
で注釈が付けられた非同期メソッドは、async void
ではなく、Task
値を返す必要があります。 これにより、ジェネレーターは代わりに非同期コマンド ( AsyncRelayCommand
や AsyncRelayCommand<T>
) を生成できます。これにより、コンカレンシー制御、実行の追跡などの追加機能が提供されます。
次の例では MVVMTK0039 が発生します:
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace MyApp;
public partial class SampleViewModel : ObservableObject
{
[RelayCommand]
private async void DoWorkAsync()
{
await Task.Delay(1000); // Do some work
}
}
DoWorkAsync
は非同期ですが、void
を返していることがわかります。 この問題を修正するには、次のようにコードを更新します:
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace MyApp;
public partial class SampleViewModel : ObservableObject
{
[RelayCommand]
private async Task DoWorkAsync()
{
await Task.Delay(1000);
}
}
その他のリソース
- 単体テストでは、さらに他の例を見つけることができます。
GitHub で Microsoft と共同作業する
このコンテンツのソースは GitHub にあります。そこで、issue や pull request を作成および確認することもできます。 詳細については、共同作成者ガイドを参照してください。
MVVM Toolkit