public void AtomicDataResource_Atomic_Self_Dispose_Repeating()
    {
        const int   MAX            = 5000;
        var         resource       = new AtomicFloatResource(MAX, Allocator.Persistent);
        var         holder         = new NativeArray <AtomicFloat>(MAX, Allocator.Persistent);
        AtomicFloat special_afloat = new AtomicFloat();

        for (var k = 0; k < 8; ++k)
        {
            var job0 = new Job0()
            {
                resource = resource,
                holder   = holder,
            };
            job0.Schedule(MAX, 32).Complete();
            Assert.AreEqual(MAX, resource.getCountInUse());

            if (k == 0)
            {
                special_afloat = holder[MAX / 3];
            }

            for (var i = 0; i < MAX; ++i)
            {
                var afloat = holder[i];
                Assert.IsTrue(afloat.Exists());
            }

            var job3 = new Job3()
            {
                holder = holder,
            };
            job3.Schedule(MAX, 32).Complete();
            Assert.AreEqual(0, resource.getCountInUse());

            for (var i = 0; i < MAX; ++i)
            {
                var afloat = holder[i];
                Assert.IsFalse(afloat.Exists());
            }
        }
        {
            var job0 = new Job0()
            {
                resource = resource,
                holder   = holder,
            };
            job0.Schedule(MAX, 32).Complete();
            Assert.AreEqual(MAX, resource.getCountInUse()); // all slots are in use.

            Assert.IsFalse(special_afloat.Exists());        // too old.
        }

        holder.Dispose();
        resource.Dispose();
    }
예제 #2
0
    public void NativeLimitedCounter_IncrementDecrement_MoreStrict()
    {
        const int MAX     = 32 * 32;
        var       counter = new NativeLimitedCounter(Allocator.Persistent);

        for (var i = 0; i < MAX / 2; ++i)
        {
            counter.TryIncrement(MAX);
        }
        var job = new Job3();

        job.counter = counter;
        job.Schedule(MAX, 32).Complete();

        Assert.AreEqual(MAX / 2, counter.Count);
        counter.Dispose();
    }
    public void AtomicDataResource_Atomic_Self_Dispose()
    {
        const int MAX      = 5000;
        var       resource = new AtomicFloatResource(MAX, Allocator.Persistent);
        var       holder   = new NativeArray <AtomicFloat>(MAX, Allocator.Persistent);
        var       job0     = new Job0()
        {
            resource = resource,
            holder   = holder,
        };

        job0.Schedule(MAX, 32).Complete();
        Assert.AreEqual(MAX, resource.getCountInUse());

        for (var i = 0; i < MAX; ++i)
        {
            var afloat = holder[i];
            Assert.IsTrue(afloat.Exists());
        }

        var job3 = new Job3()
        {
            holder = holder,
        };

        job3.Schedule(MAX, 32).Complete();
        Assert.AreEqual(0, resource.getCountInUse());

        for (var i = 0; i < MAX; ++i)
        {
            var afloat = holder[i];
            Assert.IsFalse(afloat.Exists());
        }

        holder.Dispose();
        resource.Dispose();
    }
예제 #4
0
        public async Task <ActionResult> Add(int?p1Count, int?p2Count, int?p3Count, int?p4Count, int?p5Count)
        {
            var appID = ConfigurationManager.AppSettings["ApplicationID"];

            if (string.IsNullOrWhiteSpace(appID))
            {
                appID = "Shift.Demo.MVC";
            }

            var message = "";

            if (p1Count > 0)
            {
                for (var i = 0; i < p1Count; i++)
                {
                    var job1        = new Job1();
                    var progress    = new SynchronousProgress <ProgressInfo>(); //placeholder to be replaced by Server progress object
                    var cancelToken = (new CancellationTokenSource()).Token;    //placeholder to be replaced by Server token
                    var pauseToken  = (new PauseTokenSource()).Token;
                    await jobClient.AddAsync(appID, () => job1.Start("Hello World!", progress, cancelToken, pauseToken));
                }

                message += p1Count + " - Job1 added to queue. <br/>";
            }

            if (p2Count > 0)
            {
                for (var i = 0; i < p2Count; i++)
                {
                    var job2        = new Job2();
                    var progress    = new SynchronousProgress <ProgressInfo>();
                    var cancelToken = (new CancellationTokenSource()).Token; //placeholder to be replaced by Server token
                    var pauseToken  = (new PauseTokenSource()).Token;
                    await jobClient.AddAsync(appID, () => job2.Start(progress, 1, cancelToken, pauseToken));
                }

                message += p2Count + " - Job2 added to queue. <br/>";
            }

            if (p3Count > 0)
            {
                var simpleList = new List <int>();
                for (var i = 1; i <= 100; i++)
                {
                    simpleList.Add(i);
                }

                for (var i = 0; i < p3Count; i++)
                {
                    var job3     = new Job3();
                    var progress = new SynchronousProgress <ProgressInfo>();
                    await jobClient.AddAsync(appID, () => job3.Start(progress, simpleList));
                }

                message += p3Count + " - Job3 added to queue. <br/>";
            }

            if (p4Count > 0)
            {
                var complexList = new List <TestData>();
                for (var i = 1; i <= 100; i++)
                {
                    var newData = new TestData();
                    newData.MyNumber = i;
                    newData.MyString = "mystring " + i;
                    complexList.Add(newData);
                }

                for (var i = 0; i < p4Count; i++)
                {
                    var job4        = new Job4();
                    var progress    = new SynchronousProgress <ProgressInfo>();
                    var cancelToken = (new CancellationTokenSource()).Token; //placeholder to be replaced by Server token
                    var pauseToken  = (new PauseTokenSource()).Token;
                    await jobClient.AddAsync(appID, () => job4.Start(progress, complexList, cancelToken, pauseToken));
                }

                message += p4Count + " - Job4 added to queue. <br/>";
            }

            if (p5Count > 0)
            {
                var simpleList = new List <int>();
                for (var i = 1; i <= 100; i++)
                {
                    simpleList.Add(i);
                }

                for (var i = 0; i < p5Count; i++)
                {
                    var job5        = new Job5();
                    var cancelToken = (new CancellationTokenSource()).Token; //placeholder to be replaced by Server token
                    var pauseToken  = (new PauseTokenSource()).Token;
                    var progress    = new SynchronousProgress <ProgressInfo>();
                    await jobClient.AddAsync(appID, () => job5.StartAsync(progress, simpleList, cancelToken, pauseToken));
                }

                message += p5Count + " - Job5 added to queue. <br/>";
            }

            ViewBag.Message = message;

            return(View("Index"));
        }