From b5c71350700a486b8a8d1fa0fe7db32220963eba Mon Sep 17 00:00:00 2001 From: Sergey Chebotar Date: Fri, 3 Dec 2021 12:57:22 +0300 Subject: Add Caching and replace HttpClientUtil class to external file --- Source/ExcelDNA/AddIn.cs | 4 ++++ Source/ExcelDNA/Functions.cs | 33 +++++++++++++++++++++++++-------- 2 files changed, 29 insertions(+), 8 deletions(-) (limited to 'Source/ExcelDNA') diff --git a/Source/ExcelDNA/AddIn.cs b/Source/ExcelDNA/AddIn.cs index dd99667..0505e5b 100644 --- a/Source/ExcelDNA/AddIn.cs +++ b/Source/ExcelDNA/AddIn.cs @@ -1,13 +1,17 @@ using ExcelDna.Integration; using ExcelDna.Registration; +using System.Net.Http; namespace Rehau.Sku.Assist { public class AddIn : IExcelAddIn { + public static HttpClient httpClient; + public void AutoOpen() { RegisterFunctions(); + httpClient = new HttpClient(); } public void AutoClose() diff --git a/Source/ExcelDNA/Functions.cs b/Source/ExcelDNA/Functions.cs index a282e3e..db882c5 100644 --- a/Source/ExcelDNA/Functions.cs +++ b/Source/ExcelDNA/Functions.cs @@ -1,19 +1,36 @@ -using AngleSharp.Dom; -using ExcelDna.Integration; -using System.Net.Http; +using ExcelDna.Integration; using System.Threading.Tasks; +using System.Runtime.Caching; namespace Rehau.Sku.Assist { public class Functions { [ExcelFunction] - public static async Task RAUNAME(string request) + public static object RAUNAME(string request) { - Task contentTask = Task.Run(() => SkuAssist.GetContent(request)); - Task documentTask = await contentTask.ContinueWith(content => SkuAssist.GetDocument(content)); - IProduct product = await documentTask.ContinueWith(doc => SkuAssist.GetProductFromDocument(doc.Result)); - return product != null ? product.ToString() : "Не найдено"; + if (MemoryCache.Default.Contains(request)) + return MemoryCache.Default[request].ToString(); + + else + { + object result = ExcelAsyncUtil.Run("Rauname", new[] { request }, + delegate + { + Task product = Task.Run(() => SkuAssist.GetProduct(request)); + return product.Result; + }); + + if (Equals(result, ExcelError.ExcelErrorNA)) + { + return "Загрузка..."; + } + else + { + MemoryCache.Default.Add(request, result, System.DateTime.Now.AddMinutes(10)); + return result == null ? "Не найдено" : result.ToString(); + } + } } } } \ No newline at end of file -- cgit v1.2.3