byte[] GetFileBytes(string filePath) shouldn't throw if file doesn't exist. async Task<byte[]> GetFileBytes(string filePath), should I convert it to synchronous method or use some other pattern? Or should I throw a custom exception and attach original exception as inner? Catching all exceptions in multiple services and methods doesn't seem to be efficient ( catch (Exception e) when (e is PathTooLongException or DirectoryNotFoundException or IOException or UnauthorizedAccessException or FileNotFoundException or SecurityException) )