Как я могу вернуть значение метода? - PullRequest
0 голосов
/ 23 сентября 2018

У меня есть следующий метод, который возвращал значение null, пытаясь отладить его. Я обнаружил, что при достижении последней строки (возврата) возвращаемая переменная имеет ожидаемое значение, но вместо выхода из метода и возврата значениякод возвращается к предыдущему улову с «NullReferenceException» и в итоге возвращает ноль после этого.Это происходит только тогда, когда метод вызывается в нескольких потоках одновременно.
Может кто-нибудь объяснить мне, почему это происходит?

вызывающий блок:

List<Thread> threads = new List<Thread>();
foreach (Event eV in temp)
{
    var associatedUserEvent = new User_Event().GetItemByFilter("Event", eV.Title);
    ThreadStart c = new ThreadStart(() => xx(temp2, eV));
    Thread cT = new Thread(c);
    threads.Add(cT);
    cT.Start();
}
foreach (var cT in threads)
{
    cT.Join();
}

вызывающий метод:

public void xx(List<User_Event> temp2, Event eV)
        {
            var associatedUserEvent = new User_Event().GetItemByFilter("Event", eV.Title);
            if (associatedUserEvent != null) temp2.Add(associatedUserEvent);
        }

метод, который выполняется в обратном направлении: (строки a, c и t предназначены только для отладки)

public SPListItemCollection executeQuery()
    {

        SPListItemCollection toReturn = null;
        string a, t, c;

        try
        {
            SPWeb web = SPContext.Current.Web;

            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                if (type.getListName() != null)
                {
                    SPList list = web.GetList(web.ServerRelativeUrl + "/Lists/" + type.getListName());

                    if (filters != null || folderPath != null)
                    {

                        SPQuery query = new SPQuery();

                        if (customViewFields != null)
                        {
                            query.ViewFields = buildViewFields();
                            query.ViewFieldsOnly = true;
                            query.IncludeMandatoryColumns = false;
                        }

                        query.IncludeAttachmentUrls = true;
                        query.Folder = web.GetFolder(web.ServerRelativeUrl + "/Lists/" + type.getListName() + "/" + folderPath);
                        query.Query = this.filters != null && this.filters.Length > 0 ? this.CreateCAMLQuery() : @"<Query><OrderBy><FieldRef Name='ID' /></OrderBy></Query>";
                        query.ViewAttributes = "Scope=\"Recursive\"";
                        toReturn = list.GetItems(query);
                        a = "";
                    }
                    else
                    {
                        toReturn = list.GetItems(customViewFields);
                    }
                    c = "";
                }
                else
                {
                    throw new System.ArgumentException("Custom attributte listname cannot be null");
                }

                t = "";
            });
        }
        catch (Exception exception)
        {
            a = "";
        }

        return toReturn;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...