Commit c1593254 authored by justcoding121's avatar justcoding121

fix task exceptions

parent 7c05eeab
...@@ -504,7 +504,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -504,7 +504,7 @@ namespace Titanium.Web.Proxy.Network
Task<X509Certificate2> task; Task<X509Certificate2> task;
if (pendingCertificateTasks.TryGetValue(certificateName, out task)) if (pendingCertificateTasks.TryGetValue(certificateName, out task))
{ {
return await GetTaskResult(certificateName, task); return await task;
} }
//check in cache first //check in cache first
...@@ -518,31 +518,26 @@ namespace Titanium.Web.Proxy.Network ...@@ -518,31 +518,26 @@ namespace Titanium.Web.Proxy.Network
//run certificate creation task //run certificate creation task
task = Task.Run(() => task = Task.Run(() =>
{ {
return CreateCertificate(certificateName, false); var result = CreateCertificate(certificateName, false);
if (result != null)
{
//this is ConcurrentDictionary
//if key exists it will silently handle; no need for locking
certificateCache.TryAdd(certificateName, new CachedCertificate
{
Certificate = result
});
}
return result;
}); });
pendingCertificateTasks.TryAdd(certificateName, task); pendingCertificateTasks.TryAdd(certificateName, task);
var certificate = await task;
return await GetTaskResult(certificateName, task);
}
private async Task<X509Certificate2> GetTaskResult(string certificateName, Task<X509Certificate2> task)
{
await task;
pendingCertificateTasks.TryRemove(certificateName, out task); pendingCertificateTasks.TryRemove(certificateName, out task);
if (task.Result != null) return certificate;
{
//this is ConcurrentDictionary
//if key exists it will silently handle; no need for locking
certificateCache.TryAdd(certificateName, new CachedCertificate
{
Certificate = task.Result
});
}
return task.Result;
} }
/// <summary> /// <summary>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment