Каждому потоку - уникальный объект

Gor

Client
Регистрация
30.09.2016
Сообщения
248
Благодарностей
30
Баллы
28
Приветствую!
Решал задачку целый день, не получилось :( Хэлп :-))

Нужно создать объект класса Person.
Чтобы объект был доступен из любого кубика проекта.
Чтобы объект был уникальным для каждого потока.

В процессе решения получилось 4 неверных варианта.
Вариант 1
Общий код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using Newtonsoft;

namespace ZennoLab.OwnCode
{
    public static class CommonCode
    {
        public static object SyncObject = new object();
    }
    public class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
    }
}
1 снипет:
Код:
Random rand = new Random();
Person person1 = new Person();

person1.Age = rand.Next(0,10000000);
project.Context["Person"] = person1;
2 снипет:

Код:
Person person1 = project.Context["Person"];

project.SendInfoToLog(person1.Age.ToString(),true);
Thread.Sleep(10000);
Результат работы шаблона в 4 потока: http://prntscr.com/mgoc5s

Person.Age повторяются, не смотря на то, что были сгенерированы рэндомно.


Вариант 2
using:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using Newtonsoft;

namespace ZennoLab.OwnCode
{
    public static class CommonCode
    {
        public static object SyncObject = new object();
        [ThreadStatic] public static List<Person> PersonList = new List<Person>();
    }
    public class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
    }
}
1 снипет:

Код:
List<Person> PersonList = ZennoLab.OwnCode.CommonCode.PersonList;
Person person1 = new Person();
person1.Age = new Random().Next(0,1000000);
PersonList.Add(person1);
2 снипет:

Код:
List<Person> PersonList = ZennoLab.OwnCode.CommonCode.PersonList;
Person person1 = PersonList[0];
project.SendInfoToLog(person1.Age.ToString(),true);
Thread.Sleep(5000);
Результат работы шаблона в 4 потока: http://prntscr.com/mgof20
Проект выполняется лишь иногда.

Вариант 3
Общий код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using Newtonsoft;

namespace ZennoLab.OwnCode
{
    public static class CommonCode
    {
        public static object SyncObject = new object();
    }
    public static class Person
    {
        public static int Age { get; set; }
        public static string Name { get; set; }
        public static string Surname { get; set; }
    }
}
1 снипет:

Код:
Random rand = new Random();
Person.Age = rand.Next(0,10000000);
2 снипет:

Код:
project.SendInfoToLog(Person.Age.ToString(),true);
Thread.Sleep(10000);
Результат работы шаблона в 4 потока:
http://prntscr.com/mgohnr
http://prntscr.com/mgoia4

Person.Age повторяются, не смотря на то, что были сгенерированы рэндомно.


Вариант 4

Общий код:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using Newtonsoft;

namespace ZennoLab.OwnCode
{
    public static class CommonCode
    {
        public static object SyncObject = new object();
    }
    public class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
    }
}
1 снипет:

Код:
Random rand = new Random();
Person person1 = new Person();
List<Person> PersonList = new List<Person>();

person1.Age = rand.Next(0,10000000);
PersonList.Add(person1);
project.Context["PersonList"] = PersonList;
2 снипет:

Код:
List<Person> PersonList = project.Context["PersonList"];
Person person1 = PersonList[0];
project.SendInfoToLog(person1.Age.ToString(),true);
Thread.Sleep(5000);
Результат работы шаблона в 4 потока:
http://prntscr.com/mgolbr


Person.Age повторяются, не смотря на то, что были сгенерированы рэндомно.


Я даже dll написал с отдельным классом Person, со своим листом, с методами и без методов. Все то же самое...


Это ППЦ, товарищи... Я не прогер, я только учусь. Не пинайте сильно ) И так весь день промаялся )
 
Последнее редактирование:

SoUp1

Client
Регистрация
15.09.2013
Сообщения
134
Благодарностей
41
Баллы
28
Если проблема с рандомом то ответ а этом видео
 
  • Спасибо
Реакции: Gor

Gor

Client
Регистрация
30.09.2016
Сообщения
248
Благодарностей
30
Баллы
28
Если проблема с рандомом то ответ а этом видео
Спасибо большое! Проблема в рэндоме. Никогда бы не подумал. Оказывается генерируются ПСЕВДОслучайные числа рэндомом по формуле, которая зависит от времени инициализации рэндома. Волосатов нормальный парень! Есть его видеоуроки в общем доступе? Одно время интересовался его подходом к обучению и его обучающей программой.
Сделал так:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
using System.Text.RegularExpressions;
using ZennoLab.CommandCenter;
using ZennoLab.InterfacesLibrary;
using ZennoLab.InterfacesLibrary.ProjectModel;
using ZennoLab.InterfacesLibrary.ProjectModel.Collections;
using ZennoLab.InterfacesLibrary.ProjectModel.Enums;
using ZennoLab.Macros;
using Global.ZennoExtensions;
using ZennoLab.Emulation;
using Newtonsoft;

namespace ZennoLab.OwnCode
{
    public static class CommonCode
    {
        public static object SyncObject = new object();
        public static Random random = new Random();
    }
    class Person
    {
        public int Age { get; set; }
        public string Name { get; set; }
        public string Surname { get; set; }
        public Person()
        {
            Age = CommonCode.random.Next(0,10000000);
            Name = "John";
            Surname = "Smith";
        }
    }
}
Резуальтат: http://prntscr.com/mgvk0n
Спасибо! Но как-то слишком мудренно для генерации обычного случайного числа, хотя тоже вариант хороший, уверен.
 

Gor

Client
Регистрация
30.09.2016
Сообщения
248
Благодарностей
30
Баллы
28
Почесал маковку, нарисовал видео своих мытарств под музычку. Спасибо Дмитрию Коломийцу, @Zymlex , @SoUp1 за консультации.

 
  • Спасибо
Реакции: Yuriy Zymlex

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 383
Благодарностей
3 306
Баллы
113
@Gor Кстати, что бы не таскать с собой либу Newtonsoft.Json, можно использовать встроенную в зенку:
Global.ZennoLab.Json.JsonConvert
 
  • Спасибо
Реакции: Alex733 и Gor

Gor

Client
Регистрация
30.09.2016
Сообщения
248
Благодарностей
30
Баллы
28

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 383
Благодарностей
3 306
Баллы
113

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)