gpt4 book ai didi

c# - 其中一个实现需要异步的接口(interface)

转载 作者:行者123 更新时间:2023-11-30 14:26:12 25 4
gpt4 key购买 nike

我有一个接口(interface),它为我提供了一条特定的路径。在我的一个实现中,我需要使用 async ,但我还没有弄清楚如何将异步方法的结果转换为同步方法。这是代码示例:

接口(interface):

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());
}
}

关于c# - 其中一个实现需要异步的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36037233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com