task_ptr enqueue(
            dsn_task_code_t evt,
            servicelet *context,
            task_handler callback,
            int hash /*= 0*/,
            int delay_milliseconds /*= 0*/,
            int timer_interval_milliseconds /*= 0*/
            )
        {                
            dsn_task_t t;
            task_ptr tsk = new safe_task<task_handler>(callback, timer_interval_milliseconds != 0);
                
            tsk->add_ref(); // released in exec callback
            if (timer_interval_milliseconds != 0)
            { 
                t = dsn_task_create_timer(evt, safe_task<task_handler>::exec, tsk, hash, timer_interval_milliseconds);
            }   
            else
            {
                t = dsn_task_create(evt, safe_task<task_handler>::exec, tsk, hash);
            }

            tsk->set_task_info(t);

            dsn_task_call(t, context ? context->tracker() : nullptr, delay_milliseconds);
            return tsk;
        }
Example #2
0
    void rpc_session::start_read_next(int read_next)
    {
        // server only
        if (!is_client())
        {
            int delay_ms = 0;
            {
                utils::auto_lock<utils::ex_lock_nr> l(_lock);
                delay_ms = _delay_server_receive_ms;
                _delay_server_receive_ms = 0;
            }

            // delayed read
            if (delay_ms > 0)
            {
                auto delay_task = dsn_task_create(
                    LPC_DELAY_RPC_REQUEST_RATE,
                    __delayed_rpc_session_read_next__,
                    this
                    );
                this->add_ref(); // released in __delayed_rpc_session_read_next__
                dsn_task_call(delay_task, delay_ms);
            }
            else
            {
                do_read(read_next);
            }
        }
        else
        {
            do_read(read_next);
        }
    }
Example #3
0
File: lpc.cpp Project: Jupige/rDSN
TEST(core, lpc)
{
    std::string result;
    auto t = dsn_task_create(LPC_TEST_HASH, on_lpc_test, (void*)&result, 1);
    dsn_task_add_ref(t);
    dsn_task_call(t, 0);
    dsn_task_wait(t);
    dsn_task_release_ref(t);

    EXPECT_TRUE(result.substr(0, result.length() - 2) == "client.THREAD_POOL_TEST_SERVER");
}
Example #4
0
DSN_PY_API void dsn_task_call_helper(dsn_task_t task, int delay_milliseconds)
{
	return dsn_task_call(task, delay_milliseconds);
}