В основном проекте .net, если вы используете WindowsAzure.Storage пакет nuget, есть только асинхронный метод, такой как DownloadTextAsync
, и никакой метод синхронизации, такой как DownloadText
.
.
Но новый пакет Microsoft.Azure.Storage.Blob поддерживает синхронизацию и асинхронный метод, такие как DownloadTextAsync
и DownloadText
.
От вас зависит выбор метода синхронизации или асинхронности.
Если файл очень большой, и его загрузка займет много времени, а во время загрузки у вас есть другие действия, вы можете выбрать асинхронный метод.
Пример асинхронного кода, как показано ниже:
class Program
{
static void Main(string[] args)
{
//your other code
CloudBlockBlob myblob = cloudBlobContainer.GetBlockBlobReference("mytemp.txt");
Console.WriteLine("in main thread: start download 111");
//assume the download would take 10 minutes.
Task<string> s = myblob.DownloadTextAsync();
//The message will print out immediately even if the download is in progress.
Console.WriteLine("in main thread 222!");
//use this code to check if the download complete or not
while (!s.IsCompleted)
{
Console.WriteLine("not completed");
System.Threading.Thread.Sleep(2000);
}
Console.WriteLine("the string length in MB: "+s.Result.Length/1024/1024);
Console.ReadLine();
}
}
Когда вы запустите указанный выше код, вы увидите, что сообщение in main thread 222!
распечатывается немедленно, даже если идет загрузка. А это значит, что вы можете делать другие вещи (некоторые другие операции), когда идет загрузка. Они не блокируют друг друга.
А если вы используете метод синхронизации, как показано ниже:
static void Main(string[] args)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("xxxx");
var blobClient = storageAccount.CreateCloudBlobClient();
CloudBlobContainer cloudBlobContainer = blobClient.GetContainerReference("f22");
CloudBlockBlob myblob = cloudBlobContainer.GetBlockBlobReference("mytemp.txt");
Console.WriteLine("in main thread: start download 111");
string s = myblob.DownloadText();
//if the download takes 10 minutes, then the following message will be printed out after 10 minutes.
Console.WriteLine("in main thread 222!");
Console.ReadLine();
}
если файл большой, и для его загрузки потребуется 10 минут. При запуске кода сообщение in main thread 222!
будет заблокировано через 10 минут (после завершения загрузки), а затем распечатано.