其中一个实现需要异步的接口
Interface where one of the implementations needs to be async
我有一个接口,它为我提供了一条特定的路径。在我的一个实现中,我需要使用 async
,但我还没有弄清楚如何将异步方法的结果转换为同步方法。这是代码示例:
接口:
public interface IFilePath
{
string GetAsset();
}
有问题的实施:
public class FilePath : IFilePath
{
public string GetAsset()
{
return GetAssetAssync();
}
private async Task<string> GetAssetAssync()
{
StorageFolder assetsFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(@"Assets").AsTask().ConfigureAwait(false);
return assetsFolder.Path;
}
}
仅对于此实现,我需要异步调用。所有其他人都不需要它。所以我不能使用 public Task<string> GetAsset()
或者我可以用什么方法吗?
任务返回方法表明实现可能是异步的。因此,最好的方法是更新您的界面以允许异步实现:
public interface IFilePath
{
Task<string> GetAssetAsync();
}
我会尝试使其他实现异步(文件 I/O 是一个自然的异步操作),但如果您有真正的同步实现(例如,从内存中的 zip 文件或其他东西读取),然后你可以将结果包装在 Task.FromResult
:
class SynchronousFilePath: IFilePath
{
public string GetAsset(); // natural synchronous implementation
public Task<string> GetAssetAsync()
{
return Task.FromResult(GetAsset());
}
}
我有一个接口,它为我提供了一条特定的路径。在我的一个实现中,我需要使用 async
,但我还没有弄清楚如何将异步方法的结果转换为同步方法。这是代码示例:
接口:
public interface IFilePath
{
string GetAsset();
}
有问题的实施:
public class FilePath : IFilePath
{
public string GetAsset()
{
return GetAssetAssync();
}
private async Task<string> GetAssetAssync()
{
StorageFolder assetsFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(@"Assets").AsTask().ConfigureAwait(false);
return assetsFolder.Path;
}
}
仅对于此实现,我需要异步调用。所有其他人都不需要它。所以我不能使用 public Task<string> GetAsset()
或者我可以用什么方法吗?
任务返回方法表明实现可能是异步的。因此,最好的方法是更新您的界面以允许异步实现:
public interface IFilePath
{
Task<string> GetAssetAsync();
}
我会尝试使其他实现异步(文件 I/O 是一个自然的异步操作),但如果您有真正的同步实现(例如,从内存中的 zip 文件或其他东西读取),然后你可以将结果包装在 Task.FromResult
:
class SynchronousFilePath: IFilePath
{
public string GetAsset(); // natural synchronous implementation
public Task<string> GetAssetAsync()
{
return Task.FromResult(GetAsset());
}
}