StarryEyes.Models.Timelines.Statuses.StatusModel.Get C# (CSharp) 메소드

Get() 공개 정적인 메소드

public static Get ( TwitterStatus status ) : Task
status StarryEyes.Anomaly.TwitterApi.DataModels.TwitterStatus
리턴 Task
        public static async Task<StatusModel> Get(TwitterStatus status)
        {
            return GetIfCacheIsAlive(status.Id) ?? await _loader.StartNew(async () =>
            {
                if (status.GenerateFromJson)
                {
                    status = await StatusProxy.SyncStatusActivityAsync(status).ConfigureAwait(false);
                }
                var rto = status.RetweetedOriginal == null
                              ? null
                              : await Get(status.RetweetedOriginal).ConfigureAwait(false);
                var lockerobj = _generateLock.GetOrAdd(status.Id, new object());
                try
                {
                    lock (lockerobj)
                    {
                        StatusModel model;
                        WeakReference<StatusModel> wr;
                        _staticCache.TryGetValue(status.Id, out wr);
                        if (wr != null && wr.TryGetTarget(out model))
                        {
                            return model;
                        }

                        // cache is dead/not cached yet
                        model = new StatusModel(status, rto);
                        wr = new WeakReference<StatusModel>(model);
                        _staticCache[status.Id] = wr;
                        return model;
                    }
                }
                finally
                {
                    _generateLock.TryRemove(status.Id, out lockerobj);
                    // ReSharper disable InvertIf
#pragma warning disable 4014
                    if (Interlocked.Increment(ref _cleanupCount) == CleanupInterval)
                    {
                        Interlocked.Exchange(ref _cleanupCount, 0);
                        Task.Run((Action)CollectGarbages);
                    }
#pragma warning restore 4014
                    // ReSharper restore InvertIf
                }
            }).Unwrap().ConfigureAwait(false);
        }