Я использую async & await метод для загрузки проекта VSO API, но некоторая временная нить никогда не возвращается и непрерывно ждет данных потока. Так что мне нужно делать в случае. Я не знаю, сколько времени нужно скачать. Если мы сможем сделать что-нибудь, что поток, который ждет более 24 часов, приостанавливается.Как отменить поток из тупика в async & await
Пожалуйста, укажите в строках ниже code-
public static async Task<string> DownloadProject(string Project, string sourceUrl, string targetdir, string BackPlanName, int callbyservice)
{
FileStream fileStream = null;
DateTime starttime = DateTime.Now;
string str = "";
ILogger ilogger = new Logger();
ConfigurationSettings objXConfiguration = new ConfigurationSettings();
System.Net.ServicePointManager.Expect100Continue = false;
try
{
var username = objConfigurationSettings.UserName;
var password = objConfigurationSettings.Password;
using (HttpClient client = new HttpClient())
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
client.DefaultRequestHeaders.Accept.Add(
new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/zip"));
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic",
Convert.ToBase64String(
System.Text.ASCIIEncoding.ASCII.GetBytes(
string.Format("{0}:{1}", username, password))));
client.DefaultRequestHeaders.Add("Connection", new string[] { "Keep-Alive" });
//=============================================================================================================
string FilePath = targetdir + "\\" + BackPlanName;
// string CurrentDate = DateTime.Now.Day.ToString() + "-" + DateTime.Now.Month.ToString() + "-" + DateTime.Now.Year.ToString() + "-" + DateTime.Now.Hour.ToString() + "-" + DateTime.Now.Minute.ToString() + "-" + DateTime.Now.Second;
str = Project + ".zip";
if (!Directory.Exists(FilePath))
{
Directory.CreateDirectory(FilePath);
}
fileStream = new FileStream(FilePath + "\\" + str, FileMode.Create, FileAccess.Write);
System.Net.ServicePointManager.Expect100Continue = false;
var stream = await client.GetStreamAsync(sourceUrl).ConfigureAwait(continueOnCapturedContext: false);
await stream.CopyToAsync(fileStream).ConfigureAwait(continueOnCapturedContext: false);
//===========================================================================
return FilePath + "\\" + str;
}
}
catch (Exception e)
{
throw e;
}
finally {
}
}
Используйте CancellationToken с методом ОЖИДАНИЯ. – kidshaw
Можете ли вы добавить код для токена отмены? client.GetStreamAsync (sourceUrl) не имеет свойства токена отмены. –
Я не был уверен, поэтому добавив комментарий. Альтернативой является вызов его параллельно с заданием тайм-аута, а затем выполнение задачи. Быстрый поиск на SO должен привести пример. – kidshaw