5

Visual Studio 2015 ASP.NET MVC Core プロジェクトを Visual Studio 2017 に変換したところ、エラー リストに次の情報メッセージが表示されます。

メッセージ IDE1006 命名規則違反: サフィックスがありません: 'Async'

このメッセージは、以下に焦点を当てたコントローラーで発生します。

public async Task<IActionResult> Index()

これは、作成、削除、詳細、および編集にも適用されます。メッセージは情報として表示され、プロジェクト内の 1,000 回以上のオカレンスに適用されます。Index を IndexAsync に変更する必要があるようです。
から変更する:

public async Task<IActionResult> Index()
public async Task<IActionResult> Create()
public async Task<IActionResult> Delete(int? id)
public async Task<IActionResult> Details(int? id)

への変更:

public async Task<IActionResult> IndexAsync()
public async Task<IActionResult> CreateAsync()
public async Task<IActionResult> DeleteAsync(int? id)
public async Task<IActionResult> DetailsAysnc(int? id)

私のプロジェクトはビルドされ、VS 2015 では問題にならないため、これは現時点ではオプションのようです。作業を行ってもかまいません。Visual Studio 2017 ASP.NET Core でこれを変更することが正しいアプローチであることを確認する必要があります。

4

2 に答える 2

4

Microsoft は、非同期メソッドの末尾に async という単語を付けるように促しています。なんで?Visual Studio 2017のリリース ノートには、この情報が記載されています。

非同期メソッドのタスクのような戻り値の型: これにより、非同期メソッドから任意のタスクのような型を返す機能が導入されます。以前は、これらの戻り値の型は と に制限されTask<T>ていTaskました。

戻り値の型を調べるだけで、どのメソッドが非同期であるかが明らかにならないように思えます。それらに async という接尾辞を付けることは良い考えかもしれません。VS がこの「提案」を行う前に、規則について議論する以前のスタック オーバーフローの質問がありました。Microsoft の Stephen Toub がこれに対処しました。引用します。

パブリック メソッドが Task を返すものであり、本質的に非同期である場合 (完了まで常に同期的に実行されることが知られているが、何らかの理由で Task を返すことが知られているメソッドとは対照的に)、「Async」サフィックスが必要です。それがガイドラインです。ここでの命名の主な目的は、呼び出されたメソッドがすべての作業を同期的に完了しない可能性が高いことを機能の消費者に非常に明白にすることです。もちろん、同期メソッドと非同期メソッドの両方で機能が公開されているため、それらを区別するために名前の違いが必要な場合にも役立ちます。メソッドが非同期実装をどのように達成するかは、命名には重要ではありません。コンパイラの助けを得るために async/await を使用するか、System.Threading.Tasks の型とメソッドを直接使用するか (例:

もちろん、ガイドラインには常に例外があります。命名の場合の最も顕著なものは、タイプ全体の存在理由が非同期に焦点を当てた機能を提供することである場合です。その場合、すべてのメソッドに Async を持つことはやり過ぎです。たとえば、他のタスクを生成する Task 自体のメソッドです。 .

void を返す非同期メソッドに関しては、非同期作業がいつ完了したかを呼び出し元が知る良い方法がないため、それらを公の表面に置くことは望ましくありません。ただし、void を返す非同期メソッドを公開する必要がある場合は、非同期作業が開始されていることを伝える名前が必要になる可能性が高く、意味がある場合はここで "Async" サフィックスを使用できます。このケースがいかにまれであるべきかを考えると、それは実際にはケースバイケースの種類の決定であると私は主張します.

お役に立てば幸いです、スティーブ

要するに、それは情報提供です。しかし、Microsoft が Task を超えて戻り値の型を拡張したため、ますますベスト プラクティスのようになりつつあります。ご自身の判断でご使用ください。

于 2016-11-19T16:47:06.203 に答える