powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / загадка с Task
15 сообщений из 15, страница 1 из 1
загадка с Task
    #37843276
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во время отладки на странице из-под VS выполняется код

Код: c#
1.
2.
3.
4.
5.
6.
protected void Page_Load(object sender, EventArgs e)
{
   ....
   await cmd.ExecuteNonQueryAsync();
   ....
}



и в базе реально данные меняются
Когда же дергаю эту же страничку в браузере, запущенном не VS - происходит странное: вначале может пару раз в базу дойти вызов, а потом нифига - в SQL Server Profiler видны только Login, а последующих Call и Logout нету!!

В чем тут может быть засада?
...
Рейтинг: 0 / 0
загадка с Task
    #37843278
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот реализация

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
internal static async Task<int> ExecuteNonQueryAsync(CommandType commandType, string commandText, params DbParameter[] commandParameters)
		{
				using (var conn = new SqlConnection())
				{
					conn.ConnectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString + "async=True;";
					using (var cmd = conn.CreateCommand())
					{
						cmd.Connection = conn;
						cmd.CommandType = commandType;
						cmd.CommandText = commandText;
						AttachParameters(cmd, commandParameters);

						await conn.OpenAsync();
						return await cmd.ExecuteNonQueryAsync();
					}
				}
		}
...
Рейтинг: 0 / 0
загадка с Task
    #37843283
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
грешил на
Код: c#
1.
conn.ConnectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString + "async=True;";


но при
Код: c#
1.
conn.ConnectionString = ConfigurationManager.ConnectionStrings["db"].ConnectionString;


тоже самое...
...
Рейтинг: 0 / 0
загадка с Task
    #37843313
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рихтер подобное поведение описывает
Посмотри сгенерированный компилятором код, возможно из-за асинхронности у тебя корневые ссылки на объекты запросов становятся доступны для гарбежколлектора. А при отладке компилятор генерит специально иной код, чтобы ссылки не убивать, а нормально продебагить :)
...
Рейтинг: 0 / 0
загадка с Task
    #37843316
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SanSYS,

я б продебагил бы нормально - но как это?
и как продебагить нормально когда запускается просто браузер без VS?? )
...
Рейтинг: 0 / 0
загадка с Task
    #37843320
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp...как продебагить нормально когда запускается просто браузер без VS?? )
Файрбаг+фидлер.
ПС. Это только ответ на конкретный вопрос, так что не надо чего-то такого предполагать. ОК?
...
Рейтинг: 0 / 0
загадка с Task
    #37843325
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShSerge,

ну вы ващее меня за чайника держите - неужели я fiddler-ом пользоваться не умею и не посмотрел что происходит!!??
запрос на загрузку страницы происходит и страница грузится - не кэширована!!!
...
Рейтинг: 0 / 0
загадка с Task
    #37843332
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странное наблюдение - когда перегружаю IIS сыпятся те потерянные Logout в SQL Profiler
т.е. они зависают и не доходят до SQL сервера!
...
Рейтинг: 0 / 0
загадка с Task
    #37843333
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одно наблюдение - logout и соответственно call не доходят до SQL сервера если быстро повторять операцию
Все работает если делать раз в 2-3 секунды
...
Рейтинг: 0 / 0
загадка с Task
    #37843395
brainproof
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ммм народ то уже на пишет на сахаре шарпа 5...завидую( помоч не могу,т.к. нету ..хотя можно попробовать через AsyncBridge сделать добавление сахара для 4 фреймворка но нужна студия 11
...
Рейтинг: 0 / 0
загадка с Task
    #37843448
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Индусы опять напортачили - оказывается если писать

Код: c#
1.
2.
await conn.OpenAsync();
await cmd.ExecuteNonQueryAsync();



то conn.OpenAsync() уходит в астрал и ничего не работает - надо просто conn.Open(), а уж затем
Код: c#
1.
await cmd.ExecuteNonQueryAsync();



но об этом нигде не написано и никто видимо не тестировал - нашел в исходниках SignalR
...
Рейтинг: 0 / 0
загадка с Task
    #37843483
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или так :

Код: c#
1.
2.
Task.WhenAll(conn.OpenAsync());
await cmd.ExecuteNonQueryAsync();
...
Рейтинг: 0 / 0
загадка с Task
    #37843513
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приношу свои извинения индусам из МС, но хаю индусов ваще - вариант метода, за еще не изученным материалом по Task, был взят из какого-то блога, но он в корне неверный - открывать соединение после создания команды...!!!!

вот правильный код

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
internal static async Task<object> ExecuteScalarAsync(CommandType commandType, string commandText, params SqlParameter[] commandParameters)
{
	using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["db"].ConnectionString + "async=True;"))
	{
		await conn.OpenAsync();
		using (var cmd = conn.CreateCommand())
		{
			cmd.Connection = conn;
			cmd.CommandType = commandType;
			cmd.CommandText = commandText;
			AttachParameters(cmd, commandParameters);

			return await cmd.ExecuteScalarAsync();
		}
	}
}
...
Рейтинг: 0 / 0
загадка с Task
    #37843514
sp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, вот хорошая статья с тестами по Task и БД Asynchronous Database Calls With Task-based Asynchronous Programming Model (TAP) in ASP.NET MVC 4
...
Рейтинг: 0 / 0
загадка с Task
    #37843765
Фотография SanSYS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sp, ну я же тебе все написал. В твоем новом варианте - конн используется после асинхронного использования, посему он не доступен для коннектора (уничтожения/игнора)
спс за ссыль на статью, посмотрим
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / загадка с Task
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]