Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923

Асинхронная задача Result = "{Not yet completed}"

22.01.2021, 12:00. Показов 5581. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Стараюсь получить баланс пользователя через асинхронный метод BalanseNowAsync через запрос по RestAPI.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        private string BalanseNow()
        {
            Response<ClientAccount[]> response;
            try
            {
                response = service.GetClientAccounts(FindedClient.id.ToString()); //точка останова тут
            }
            catch (Exception ex)
            {
                throw new ArgumentException(ex.Message);
            }
            //в return возвращается баланс из всей кучи не нужной для метода информации. 
            return (new List<ClientAccount>(response.Data).Find(x => x.account_id == SelectedAccount.account_id)).summ;
        }
        public async Task<string> BalanseNowAsync() => await Task.Factory.StartNew(BalanseNow);
Если делать без асинхронна, то всё работает, но как только мои пальцы стараются слова async, получаю следующее:

после момента с точной остановы перекидывает обратно в класс, вызывающий метод, а результат метода
Id = 1965, Status = WaitingForActivation, Method = "{null}", Result = "{Not yet computed}"
Дальше пойдёт не особо нужная информация, но если кому интересно, то сам метод, из API, выглядит следующим образом

C#
1
2
3
4
5
        public Response<ClientAccount[]> GetClientAccounts(string clientID) 
        {
            //не важная информация
            return response;
        }
И структура класс Response
C#
1
2
3
4
5
6
7
8
    public class Response<T>
    {
        public bool Success { get; set; }
        public string Error { get; set; }
        public bool SessionExpired { get; set; }
        public T Data { get; set; }
        public long Total { get; set; }
    }
То есть Response, это что-то а-ля Task, как я считаю, выглядит более функциональней.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.01.2021, 12:00
Ответы с готовыми решениями:

Build completed with a result of 'Failed' при билде на Андроид
Сделал проект и уже собирался билдить, но в конце загрузки высветилось 4 сообщения:

Чем отличаются синхронная и асинхронная задача?
Чем отличаются синхронная и асинхронная задача?

underflow during read from stream minor code: 0 completed: No minor code: 0 completed: No
Сначала делаю 1) String testString = orb.object_to_string(obj); PreparedStatement pstmt = conn.prepareStatement('INSERT INTO...

53
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
25.01.2021, 13:02  [ТС]
Студворк — интернет-сервис помощи студентам
OwenGlendower,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
        public async Task<TResponse> SendHttpRequest<TResponse, TRequest>(string url, HttpMethod method, TRequest request) where TRequest : class
                                                                                                                           where TResponse : class
        {
            TResponse response = null;
 
            using (var client = new HttpClient())
            {
                var httpRequest = new HttpRequestMessage(method, url);
 
                foreach (var header in _headers)
                {
                    httpRequest.Headers.Add(header.Key, header.Value);
                }
 
                if (request != null && method != HttpMethod.Get)
                {
                    string json = JsonConvert.SerializeObject(request);
                    var content = new StringContent(json);
                    content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
                    httpRequest.Content = content;
                }
 
                var httpResponse = await client.SendAsync(httpRequest);
 
                if (httpResponse.IsSuccessStatusCode)
                {
                    string json = await httpResponse.Content.ReadAsStringAsync();
                    response = JsonConvert.DeserializeObject<TResponse>(json);
                }
            }
 
            return response;
        }
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
        public TResponse SendWebRequest<TResponse, TRequest>(string url, HttpMethod method, TRequest request) where TRequest : class
                                                                                                              where TResponse : class
        {
            TResponse response = null;
 
            var webRequest = WebRequest.Create(url);
 
            webRequest.Method = method.Method;
 
            foreach (var header in _headers)
            {
                webRequest.Headers.Add(header.Key, header.Value);
            }
 
            if (method != HttpMethod.Get && request != null)
            {
                string json = JsonConvert.SerializeObject(request);
                byte[] bytes = Encoding.ASCII.GetBytes(json);
 
                webRequest.ContentType = "application/json";
                webRequest.ContentLength = bytes.Length;
 
                using (var stream = webRequest.GetRequestStream())
                {
                    stream.Write(bytes, 0, bytes.Length);
                }
            }
            else
            {
                webRequest.ContentLength = 0;
            }
 
            var webResponse = webRequest.GetResponse();
 
            using (var stream = webResponse.GetResponseStream())
            {
                using (var reader = new StreamReader(stream))
                {
                    string line = "";
                    while ((line = reader.ReadLine()) != null)
                    {
                        response = JsonConvert.DeserializeObject<TResponse>(line);
                    }
                }
            }
 
            webResponse.Close();
 
            return response;
        }
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
25.01.2021, 14:01
Цитата Сообщение от limeniye Посмотреть сообщение
это часть API. API, по сути, это и есть Model. Но я имею ввиду что Model -- это мой проект, а API, это отдельный проект, с запросами.
Я это и имею ввиду.
Для примера надо понимать какие методы вы создаёте и можете менять (Model), а какие из сторонней библиотеки и вы пользуетесь им "как есть" (API).
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
25.01.2021, 14:03  [ТС]
Элд Хасп, у меня открытый проект, это не скомпилированная библиотека (я об API)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,176
Записей в блоге: 2
25.01.2021, 14:13
_requestSender.SendWebRequestAsync или SendWebRequest - это методы из Api и вы их не можете менять.
А методы GetClientAccountsAsync или GetClientAccounts - это ваша редакция и вы можете её менять?

Добавлено через 34 секунды
Цитата Сообщение от limeniye Посмотреть сообщение
у меня открытый проект, это не скомпилированная библиотека (я об API)
То есть это не API, а примеры его использования?

Добавлено через 3 минуты
Цитата Сообщение от limeniye Посмотреть сообщение
Я больше вникнул в проект API. Как я понял, всё что Get -- это СИНХРОННЫЙ метод:
Вообще-то, если писали грамотно, то по соглашению о именовании, у асинхронных методов должен быть постфих Async.
А по сигнатуре они должны возвращать не результат, а задачу (Task).

Добавлено через 2 минуты
Цитата Сообщение от limeniye Посмотреть сообщение
А вот Post -- асинхронный
Судя по примерам кода - соглашение об именование не соблюдалось.
Если есть доступ к исходникам (какая понял он есть), то придётся ориентироваться на async в модификаторах метода.

Добавлено через 2 минуты
Цитата Сообщение от limeniye Посмотреть сообщение
public async Task<TResponse> SendHttpRequest
Цитата Сообщение от limeniye Посмотреть сообщение
public TResponse SendWebRequest<TResponse, TRequest>
Да....
Придётся ориентироваться только по исходникам.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,029
Записей в блоге: 1
25.01.2021, 14:23
limeniye, SendHttpRequest и SendWebRequest по сути пытаются делать одно и тоже. Говорю "пытаются" потому что в реализации есть отличия и вижу потенциальные баги в SendWebRequest. Тем не менее раз SendHttpRequest асинхронный, то GetClientAccounts можно переписать с его использованием
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        public async Task<Response<ClientAccount[]>> GetClientAccounts(string clientID) 
        {
            var jObject = new JObject
            {
                ["client_id"] = clientID
            };
 
            string json = JsonConvert.SerializeObject(jObject);
 
            json = HttpUtility.UrlEncode(json);
 
            string url = $"{_url}/client_accounts?params={json}";
 
            var response = await _requestSender.SendHttpRequest<Response<ClientAccount[]>, object>(url, HttpMethod.Get, null);
            return response;
        }
За ним следует BalanseNowAsync. BalanseNow выкидываем за ненадобностью.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        // private string BalanseNow()
        // {
            // Response<ClientAccount[]> response;
            // try
            // {
                // response = service.GetClientAccounts(FindedClient.id.ToString());
            // }
            // catch (Exception ex)
            // {
                // throw new ArgumentException(ex.Message);
            // }
 
            // return (new List<ClientAccount>(response.Data).Find(x => x.account_id == SelectedAccount.account_id)).summ;
        // }
        public async Task<string> BalanseNowAsync()
        {
            var result = await service.GetClientAccounts(FindedClient.id.ToString());
            RaiseActionBalance(BalanceEnum.TopUp, Convert.ToDecimal(result));
            return result;
        }
Добавлено через 4 минуты
И вдогонку исправленный SendWebRequest
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public async Task<TResponse> SendWebRequest<TResponse, TRequest>(string url, HttpMethod method, TRequest request) where TRequest : class
                                                                                                                  where TResponse : class
{
    var webRequest = WebRequest.CreateHttp(url);
    webRequest.Method = method.Method;
 
    foreach (var header in _headers)
    {
        webRequest.Headers.Add(header.Key, header.Value);
    }
 
    if (method != HttpMethod.Get && request != null)
    {
        string json = JsonConvert.SerializeObject(request);
        byte[] bytes = Encoding.UTF8.GetBytes(json);
 
        webRequest.ContentType = "application/json";
        webRequest.ContentLength = bytes.Length;
 
        using (var stream = webRequest.GetRequestStream())
        {
            stream.Write(bytes, 0, bytes.Length);
        }
    }
    else
    {
        webRequest.ContentLength = 0;
    }
 
    TResponse response = null;
    using (var webResponse = await webRequest.GetResponseAsync())
    using (var stream = webResponse.GetResponseStream())
    {
        using (var reader = new StreamReader(stream))
        {
            string json = await reader.ReadToEndAsync();
            response = JsonConvert.DeserializeObject<TResponse>(json);
        }
    }
 
    return response;
}
1
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
25.01.2021, 15:21  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
А методы GetClientAccountsAsync
GetClientAccounts -- синхронный, не Task метод.

SendWebRequest и метод GetClientAccounts -- это всё проект с API. Там расписаны как запросы должны отправляться и сами запросы, а также классы, в которые "упаковывают" response (например ClientAccount).

Цитата Сообщение от Элд Хасп Посмотреть сообщение
Вообще-то, если писали грамотно, то по соглашению о именовании, у асинхронных методов должен быть постфих Async
Тут такого нет, тут всё что Async и не Async пишется без этой приставки.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Судя по примерам кода - соглашение об именование не соблюдалось.
Да, всё верно.




Добавлено через 16 минут
_________________

OwenGlendower, я переделал все методы в API на async Task<> и отправкой запроса с await, но меня интересует в чём разница (для индивидуального понимания) SendHttpRequest и SendWebRequest .
До этого мой максимум с запросами -- это работа с xNet и уровень значительно отличается.
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,029
Записей в блоге: 1
25.01.2021, 15:50
Цитата Сообщение от limeniye Посмотреть сообщение
меня интересует в чём разница (для индивидуального понимания) SendHttpRequest и SendWebRequest
По коду же всё видно. Первый использует "новый" HttpClient, второй "старый" HttpWebRequest/HttpWebResponse.
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
25.01.2021, 17:12  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
По коду же всё видно
Ну, мне, если честно, совсем не видно)

Изначально мне было интересно как это всё работает, потому что такого масштаба проекта, под API, я ещё не видел.
Но объяснить как оно всё работает, а главное зачем, некому. Поэтому я, неопытный в этом деле маслёнок, пришёл к мнению что: работает -- ну и не трогай.

Сейчас же стало значительно понятней.

Для начала я разберу более простой пример на основе того, что было написано выше.
Пользователь вводит ID свой и нажимает кнопку.

Во-первых, async и Task<> должны быть в моделе, а также ожидание ответа, которое не "замораживает процесс" -- await.
Как я понял Run() или StartNew() нужны в тех случаях, когда в асинхронном методе вызывается синхронный, и чтобы вызвать его асинхронно создают новый Task. В данном случае это не требуется.
Model
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
        public async Task GetClientByIDAsync(int id, bool isRoot)
        {
            var taskClient = await service.GetClientByID(id.ToString());
 
            //Если ответ в Data больше единицы(каким-то чудом) или приравнивается нулю, значит что-то пошло не так
            if (taskClient.Data.Length > 1 || taskClient.Data.Length == 0)
            {
                FindedClient = null;
                RaiseActionClient(AuthorizationEnum.FailedAuthorization, null);
            }
 
            if (taskClient.Data.Length == 1)
            {
                //При первой авторизации беру данные пользователя
                Client tmpClient = taskClient.Data[0];
                //и тут же собираю список его счетов
                var accounts = await service.GetClientAccounts(tmpClient.id.ToString());
                //и список его активных абонементов
                var abonements = await service.GetClientTickets(tmpClient.id.ToString(), TicketState.Active);
 
                //Тут я ищу из всех его счетов депозитные
                ClientDeposits = new List<ClientAccount>(accounts.Data).FindAll(x => x.kind == 0);
                ClientAbonements = new List<ClientTicket>(abonements.Data);
                if (ClientDeposits.Count > 0)
                    SelectedAccount = ClientDeposits[0];
 
                //событие, что клиент авторизовался, или авторизовался администратор.
                FindedClient = tmpClient;
                if (!isRoot)
                    RaiseActionClient(AuthorizationEnum.Authorizated, tmpClient);
                else
                    RaiseActionClient(AuthorizationEnum.RootAutorizated, tmpClient);
            }
        }
Дальше я реализовал код взятый отсюда
Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
    public interface IAsyncCommand : ICommand
    {
        Task ExecuteAsync();
        bool CanExecute();
    }
 
    public interface IErrorHandler
    {
        void HandleError(Exception ex);
    }
 
    public static class TaskUtilities
    {
#pragma warning disable RECS0165 // Asynchronous methods should return a Task instead of void
        public static async void FireAndForgetSafeAsync(this Task task, IErrorHandler handler = null)
#pragma warning restore RECS0165 // Asynchronous methods should return a Task instead of void
        {
            try
            {
                await task;
            }
            catch (Exception ex)
            {
                handler?.HandleError(ex);
            }
        }
    }
 
 
    public class AsyncCommand : IAsyncCommand
    {
        public event EventHandler CanExecuteChanged;
 
        private bool _isExecuting;
        private readonly Func<Task> _execute;
        private readonly Func<bool> _canExecute;
        private readonly IErrorHandler _errorHandler;
 
        public AsyncCommand(
            Func<Task> execute,
            Func<bool> canExecute = null,
            IErrorHandler errorHandler = null)
        {
            _execute = execute;
            _canExecute = canExecute;
            _errorHandler = errorHandler;
        }
 
        public bool CanExecute()
        {
            return !_isExecuting && (_canExecute?.Invoke() ?? true);
        }
 
        public async Task ExecuteAsync()
        {
            if (CanExecute())
            {
                try
                {
                    _isExecuting = true;
                    await _execute();
                }
                finally
                {
                    _isExecuting = false;
                }
            }
 
            RaiseCanExecuteChanged();
        }
 
        public void RaiseCanExecuteChanged()
        {
            CanExecuteChanged?.Invoke(this, EventArgs.Empty);
        }
 
        #region Explicit implementations
        bool ICommand.CanExecute(object parameter)
        {
            return CanExecute();
        }
 
        void ICommand.Execute(object parameter)
        {
            ExecuteAsync().FireAndForgetSafeAsync(_errorHandler);
        }
        #endregion
    }


В ViewModel осталось сделать нажатие на кнопку.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
        public IAsyncCommand EnterCommand;
 
        private async Task EnterMethodAsync()
        {
            try
            {
                await model.GetClientByIDAsync(id, false);
            }
            catch
            {
                //запись в лог ошибки
            }
        }
 
        public ViewModel()
        {
            EnterCommand = new AsyncCommand(EnterMethodAsync, EnterCanMethod);
        }

И там где комментарий, я так полагаю мне дойдёт ошибка, если произойдёт ниже, и я могу записать её в лог. Верно?
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,029
Записей в блоге: 1
25.01.2021, 17:29
Цитата Сообщение от limeniye Посмотреть сообщение
И там где комментарий, я так полагаю мне дойдёт ошибка, если произойдёт ниже, и я могу записать её в лог. Верно?
Верно.

Цитата Сообщение от limeniye Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
            var taskClient = await service.GetClientByID(id.ToString());
 
            //Если ответ в Data больше единицы(каким-то чудом) или приравнивается нулю, значит что-то пошло не так
            if (taskClient.Data.Length > 1 || taskClient.Data.Length == 0)
            {
                FindedClient = null;
                RaiseActionClient(AuthorizationEnum.FailedAuthorization, null);
            }
 
            if (taskClient.Data.Length == 1)
            {
                //При первой авторизации беру данные пользователя
                Client tmpClient = taskClient.Data[0];
                ...
Почему бы не упростить код?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
            var taskClient = await service.GetClientByID(id.ToString());
 
            //Если ответ в Data больше единицы(каким-то чудом) или приравнивается нулю, значит что-то пошло не так
            if (taskClient.Data.Length != 1)
            {
                FindedClient = null;
                RaiseActionClient(AuthorizationEnum.FailedAuthorization, null);
                return;
            }
 
            //При первой авторизации беру данные пользователя
            Client tmpClient = taskClient.Data[0];
            ...
1
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
25.01.2021, 17:44  [ТС]
______________

OwenGlendower, но при такой реализации программа ведёт себя странно:
при запуске этой ViewModel у меня, в конструкторе, запускается метод

C#
1
2
3
4
5
6
7
        private bool EnterCanMethod()
        {
            if(!IsBusy)
                if (TextBoxValue != "" && TextBoxValue != null)
                    return true; 
            return false;
        }
Метод вернёт false, потому что TextBox ещё пуст и кнопка будет не кликабельна. В таком случае я могу организовать проверку на заполненность TextBox в самом методе EnterMethodAsync, но тогда какой толк от EnterCanMethod? Он просто проверяет на занятость?
То есть если EnterCanMethod изначально true, то всё работает, но если я реализую проверку на заполненность TexBox, а он изначально пустой, то больше кнопка не нажимается

Добавлено через 1 минуту
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Почему бы не упростить код?
Ваша правда, не увидел.

Добавлено через 7 минут
Я попробовал не запускать его изначально в конструкторе, а запускать его только тогда, когда это нужно:

C#
1
2
private IAsyncCommand _enterCommand;
public IAsyncCommand EnterCommand => _enterCommand ?? (_enterCommand = new AsyncCommand(EnterMethodAsync, EnterCanMethod));
При такой реализации, при запуске VM, я всё равно попадаю в EnterCanMethod, несмотря на то, что про это в конструкторе и следа нет.
Но, по сути, в этом нет смысла. Ведь даже если пользователь нажмёт на кнопку и поле будет пустое, то больше кнопка не будет кликабельна, она как "одноразовый стаканчик".
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,029
Записей в блоге: 1
25.01.2021, 20:36
limeniye, это уже отдельный разговор. Предлагаю вам создать новую тему в разделе WPF и обсудить как подружить async и команды.
0
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
11.03.2021, 01:05  [ТС]
Здравствуйте, OwenGlendower. Мне не даёт покоя этот permalink.

Уж очень мне интересно, что это за магия происходит. Можете рассказать чуточку больше?
Например: лучше делать методы отправки запросов синхронными изначально, или же наоборот? Скорее всего Вы ответите "исходя из ситуации", но я бы это и хотел понять. Почему SendHttpRequest был async, а SendWebRequest синхронным? Почему все Post запросы были async, а все Get запросы синхронными? Если у Вас появится не лишнее время, которое Вы можете на меня уделить -- буду крайне признателен)
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18409 / 14340 / 5371
Регистрация: 17.03.2014
Сообщений: 29,029
Записей в блоге: 1
11.03.2021, 09:39
Цитата Сообщение от limeniye Посмотреть сообщение
Уж очень мне интересно, что это за магия происходит. Можете рассказать чуточку больше?
О чем именно?

Цитата Сообщение от limeniye Посмотреть сообщение
лучше делать методы отправки запросов синхронными изначально, или же наоборот?
Лучше сразу асинхронными делать.

Цитата Сообщение от limeniye Посмотреть сообщение
Почему SendHttpRequest был async, а SendWebRequest синхронным?
Это нужно спрашивать у автора кода. Возможно второй метод писался когда еще не было async/await. Возможно программист не знал что WebRequest уже есть Async методы и писал по инерции код по старинке.
1
 Аватар для limeniye
1182 / 624 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
11.03.2021, 10:01  [ТС]
OwenGlendower, ответ был дан доступно. Спасибо!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.03.2021, 10:01

Асинхронная задача и завершение формы: как сделать верно?
Здравствуйте, уважаемые форумчане. У меня есть форма, которая при инициализации подгружает данные с БД. Естественно, это долго. Поэтому я...

Задача по процедуре add(+List, -Result)
Здравствуйте! Помогите написать задачу по данной процедуре. Условие Создать процедуру add(+List, -Result), генерирующую на базе...

Как string result переобразовать в char result [1024]
Как string переобразовать в char?

Use of undefined constant result - assumed 'result'
Здравствуйте! Создаю свой блог. И вот дело дошло до создания юзеров, а мне выдается ошибка Notice: Use of undefined constant result -...

Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 75 in
Warning: mysql_result() : Unable to jump to row 0 on MySQL result index 75 in Z:\home\amm.su\WWW\modules\icq\index.php on line 27 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru