У меня есть такой способ:
public void Encrypt(IFile file)
{
if (file == null)
throw new ArgumentNullException(nameof(file));
string tempFilename = GetFilename(file);
using (var stream = new FileStream(tempFilename, FileMode.OpenOrCreate))
{
this.EncryptToStream(file, stream);
file.Write(stream);
}
File.Delete(tempFilename);
}
Однако я хочу написать другой метод, очень похожий, но вместо этого он вызывает WriteAsync, например:
public async Task EncryptAsync(IFile file)
{
if (file == null)
throw new ArgumentNullException(nameof(file));
string tempFilename = GetFilename(file);
using (var stream = new FileStream(tempFilename, FileMode.OpenOrCreate))
{
this.EncryptToStream(file, stream);
await file.WriteAsync(stream);
}
File.Delete(tempFilename);
}
Однако мне не нравится иметь два метода с практически дублирующимся кодом. Как я могу избежать этого? Правильный подход кажется, что я должен использовать Action/Delegate, но подписи разные.
Мысли?