宣言できません
interface IMyInterface
{
async Task<myObject> MyMethod(Object myObj);
}
コンパイラは私に言う:
これは実装すべきものなのか、それとも非同期の性質を持つのか?これがこれまでに発生しないように禁止しますか?
メソッドがasync / awaitを使って実装されているかどうかは、 実装の詳細メソッドの動作方法は契約です detail、通常の方法で指定する必要があります。
あなたがメソッドを返すようにすると注意してください
Task
またはTask<T>
もっと 非同期であることを意味していることは明らかで、おそらく難しいでしょう 非同期にせずに実装する。
からhttps://stackoverflow.com/a/6274601/43846
あなたの実装が非同期であるかどうかにかかわらず、あなたのインターフェースとは関係ありません。言い換えれば、インタフェースは、与えられたメソッドが非同期的に実装されなければならないことを指定することはできません。
取るだけasync
あなたのインターフェースの外でそれはコンパイルされます。しかし、インターフェースを指定するだけでは非同期実装を強制する方法はありません。
2つの実装(1つは真に非同期、もう1つは同期)とのインターフェースを持っている場合、これは各実装に対して次のようになります。Task<bool>
。
public interface IUserManager
{
Task<bool> IsUserInRole(string roleName);
}
public class UserManager1
{
public async Task<bool> IsUserInRole(string roleName)
{
return await _userManager.IsInRoleAsync(_profile.Id, roleName);
}
}
public class UserManager2
{
public Task<bool> IsUserInRole(string roleName)
{
return Task.FromResult(Roles.IsUserInRole(roleName));
}
}
それが無効な方法である場合、あなたはする必要がありますreturn Task.CompletedTask;
非非同期メソッドから
(私は.NET 4.5以降と思います)
また見なさい:タスクを返す< bool>瞬時に