From 3bf4c5cf7237230b395dbf2e4d7cda31cfba3988 Mon Sep 17 00:00:00 2001 From: spx Date: Mon, 11 Feb 2013 21:39:25 +0900 Subject: [PATCH] =?utf8?q?=E3=82=AD=E3=83=A3=E3=83=83=E3=82=B7=E3=83=A5?= =?utf8?q?=E7=94=A8=E3=81=AE=E7=94=BB=E5=83=8F=E3=83=80=E3=82=A6=E3=83=B3?= =?utf8?q?=E3=83=AD=E3=83=BC=E3=83=89=E3=82=BF=E3=82=B9=E3=82=AF=E3=81=8C?= =?utf8?q?=E5=90=8C=E3=81=98address=E3=81=AB=E5=AF=BE=E3=81=97=E3=81=A6?= =?utf8?q?=E8=A4=87=E6=95=B0=E4=BD=9C=E3=82=89=E3=82=8C=E3=81=A6=E3=81=97?= =?utf8?q?=E3=81=BE=E3=81=86=E5=95=8F=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit innerDictionaryをlockする部分が2つに分かれているため、2つ目のlockに至る前に1つ目をスルーしてしまって、複数リクエストを纏められないことがある --- OpenTween/ImageCache.cs | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/OpenTween/ImageCache.cs b/OpenTween/ImageCache.cs index 726ea505..cb2a3cf8 100644 --- a/OpenTween/ImageCache.cs +++ b/OpenTween/ImageCache.cs @@ -102,36 +102,33 @@ namespace OpenTween if (this.innerDictionary.ContainsKey(address) && !this.innerDictionary[address].IsFaulted) cachedImageTask = this.innerDictionary[address]; - } - if (cachedImageTask != null) - return cachedImageTask; + if (cachedImageTask != null) + return cachedImageTask; - cancelToken.ThrowIfCancellationRequested(); + cancelToken.ThrowIfCancellationRequested(); - using (var client = new OTWebClient() { Timeout = 10000 }) - { - var imageTask = client.DownloadDataAsync(new Uri(address), cancelToken).ContinueWith(t => + using (var client = new OTWebClient() { Timeout = 10000 }) { - MemoryImage image = null; - if (t.Status == TaskStatus.RanToCompletion) + var imageTask = client.DownloadDataAsync(new Uri(address), cancelToken).ContinueWith(t => { - image = MemoryImage.CopyFromBytes(t.Result); - } + MemoryImage image = null; + if (t.Status == TaskStatus.RanToCompletion) + { + image = MemoryImage.CopyFromBytes(t.Result); + } - if (t.Exception != null) - t.Exception.Handle(e => e is WebException); + if (t.Exception != null) + t.Exception.Handle(e => e is WebException); - // FIXME: MemoryImage.Dispose() が正しいタイミングで呼ばれるように修正すべき - return image; - }, cancelToken); + // FIXME: MemoryImage.Dispose() が正しいタイミングで呼ばれるように修正すべき + return image; + }, cancelToken); - lock (this.lockObject) - { this.innerDictionary[address] = imageTask; - } - return imageTask; + return imageTask; + } } }, cancelToken).Unwrap(); } -- 2.11.0