Test1.cs

129 lines | 3.227 kB Blame History Raw Download
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Threading;

using ManagetLinkCollection.LinkStorage;
using ManagetLinkCollection.LinkStorage.Entities;
using ManagetLinkCollection.ObjectLinkStorage;

namespace ManagetLinkCollection.ConsoleTest
{
    class Test1
    {

        public LinkStorage<int, int> TestMethod1()
        {
            LinkStorage<int, int> storage
                = new LinkStorage<int, int>();

            storage.AddLink(1, (int k) => 1);

            Task.Run(() =>
            {
                storage.AddLink(1,
                    (int k) =>
                    {
                        Write("t1", "add start");
                        Thread.Sleep(5000);

                        Write("t1", "add stop");
                        return -1;
                    },
                (ILinkItem<int, int> old_v) =>
                {
                    Write("t1", "update start");
                    Thread.Sleep(5000);

                    Write("t1", "update stop");
                    return -1;
                });
            });

            Thread.Sleep(200);

            Task.Run(() =>
            {
                storage.AddLink(1,
                    (int k) =>
                    {
                        Write("t2", "add start");
                        //Thread.Sleep(5000);

                        Write("t2", "add stop");
                        return -2;
                    },
                (ILinkItem<int, int> old_v) =>
                {
                    Write("t2", "update start");
                    Write("t2", "update stop");

                    //d.TryRemove(k, out int v);
                    //throw new OperationCanceledException();

                    return -2;
                });
            });

            Console.ReadLine();
            return storage;
        }

        public void TestMethod2()
        {
            LinkStorage<int, int> storage
                = new LinkStorage<int, int>();

            storage.AddLink(1, (int k) => 1);

            Task.Run(() =>
            {
                storage.AddLink(1,
                    (int k) =>
                    {
                        Write("t1", "add start");
                        Thread.Sleep(5000);

                        Write("t1", "add stop");
                        return -1;
                    },
                (ILinkItem<int, int> old_v) =>
                {
                    Write("t1", "update start");
                    Thread.Sleep(5000);

                    Write("t1", "update stop");
                    return -1;
                });
            });

            Thread.Sleep(200);

            Task.Run(() =>
            {
                storage.RemoveLink(1,
                (ILinkItem<int, int> old_v) =>
                {
                    Write("t2", "update start");

                    Write("t2", "update stop");
                    return old_v.Data;
                }
                    );
            });

            Console.ReadLine();
        }


        static void Write(string thread, string text)
        {
            Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss.fff")}|{thread}|{text}");
        }

    }
}