Синхронизация в веб-приложении

#c# #asp.net #ajax #multithreading #function

#c# #asp.net #ajax #многопоточность #функция

Вопрос:

Я работаю над веб-приложением службы поддержки.

Я генерирую уникальный идентификатор жалобы_id из одной функции, эта функция может вызываться одновременно тремя пользователями: обычным пользователем, суперпользователем и администратором

когда любой пользователь нажимает на Новую жалобу, я вставляю пустую строку в таблицу жалоб и возвращаю этот уникальный идентификатор complaint_id вызывающему.

Но может случиться так, что все 3 пользователя одновременно вызовут функцию и, следовательно, возникнут проблемы с генерацией идентификатора жалобы

поскольку эта функция является общей, может возникнуть проблема с генерацией идентификатора. Я знаю только, что это может решить используемые потоки, но как я не знаю, что у меня очень мало знаний о потоках

Функция Get id является обычной функцией, которая вызывает хранимую процедуру.

создаст ли это проблему, если все 3 типа пользователей вызовут функцию одновременно вот код

     public string Getid(AddComplaint_DAO p)
    {
        SqlConnection con = null;
        SqlCommand cmd;
        string strConnection;
        SqlDataAdapter adpt = null;

        try
        {
            strConnection = ConfigurationManager.AppSettings["Connetionstring2"];
            con = new SqlConnection(strConnection);
            cmd = new SqlCommand("GetId", con);
            cmd.Parameters.AddWithValue("@s_CompDate", SqlDateTime.Null);
            cmd.Parameters.AddWithValue("@s_UserId", p.Ename);
            cmd.Parameters.AddWithValue("@s_LocationId", SqlString.Null);
            cmd.Parameters.AddWithValue("@s_DeptId", SqlString.Null);
            cmd.Parameters.AddWithValue("@i_Extension", SqlInt32.Null);
            cmd.Parameters.AddWithValue("@s_MainCat", SqlString.Null);
            cmd.Parameters.AddWithValue("@s_SubCat", SqlString.Null);
            cmd.Parameters.AddWithValue("@s_Item", SqlString.Null);
            cmd.Parameters.AddWithValue("@s_Subject", SqlString.Null);
            cmd.Parameters.AddWithValue("@s_Description", SqlString.Null);


            cmd.CommandType = CommandType.StoredProcedure;
            adpt = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            adpt.Fill(ds);
            if (ds != null)
            {
                if (ds.Tables[0].Rows.Count > 0)
                {
                    string val = ds.Tables[0].Rows[0][0].ToString();
                    return val;
                }
            }

        }
        catch (SqlException ex)
        {
            con.Close();
            string exep = ex.Message;
            return null;
        }
        return null;
    }
  

Я думаю, теперь это будет ясно

Комментарии:

1. Вы говорите «может возникнуть проблема с генерацией идентификатора», но не сообщаете подробностей. Что за проблема? Ваш вопрос не очень понятен. Пожалуйста, прочтите это: tinyurl.com/so-hints

2. Опубликуйте код для функции, которая генерирует идентификатор.

3. Я не думаю, что вам нужно беспокоиться об этом, используйте автоматический ключ, управляемый базой данных, он автоматически решит проблемы с параллелизмом.

4. Трудно ответить на вопрос, не видя хранимую процедуру getId.

Ответ №1:

Здесь вам абсолютно не нужно беспокоиться о синхронизации. Ваша база данных сделает это за вас. Я уверен.

Спасибо, Кришна