The easy way out is to have the blocking code implemented as a thin wrapper around the async code.
public static async Task<list<string>> GetDirectoryListingAsync(FTPLoginCredentials credentials)
{
List<string> directoryListing = new List<string>();
FtpWebRequest ftpReq = CreateFtpWebRequest(credentials, WebRequestMethods.Ftp.ListDirectory);
using (FtpWebResponse ftpResp = (FtpWebResponse)await ftpReq.GetResponseAsync())
{
string html;
using (StreamReader sr = new StreamReader(ftpResp.GetResponseStream(), System.Text.Encoding.UTF8))
html = await sr.ReadToEndAsync().ConfigureAwait(false);
directoryListing.AddRange(html.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));
}
return directoryListing;
}
public static List<string> GetDirectoryListing(FTPLoginCredentials credentials)
{
Task<list<string>> task = GetDirectoryListingAsync(credentials);
task.Wait();
return task.Result;
}