コード例 #1
0
        public override void Write(CacheItemInfo info, byte[] data)
        {
            var fi = new FileItem(info);

            PriorityQueue.AddStorageWorkItem(() =>
            {
                lock (LockObject) {
                    for (int r = 0; r < WriteRetries; r++)
                    {
                        try {
                            FileItem.EnsurePath(IsoStore, fi.FileName);
                            using (Stream stream = IsoStore.OpenFile(fi.FileName, FileMode.Create, FileAccess.Write, FileShare.None)) {
                                stream.Write(data, 0, data.Length);
                                stream.Flush();
                            }
                            _cache[info.UniqueName] = info;
                            break;
                        }
                        catch (IsolatedStorageException) {
                            Debug.WriteLine("Exception writing file: Name={0}, Length={1}", fi.FileName, data.Length);
                            // These IsolatedStorageExceptions seem to happen at random,
                            // haven't yet found a repro.  So for the retry,
                            // if we failed, sleep for a bit and then try again.
                            //
                            Thread.Sleep(50);
                        }
                    }
                }
            });
        }